ecwid-api
Version:
NodeJS wrapper for ecwid.com API
259 lines (211 loc) • 5.79 kB
JavaScript
;
var request = require('request-promise');
var qs = require('qs');
var STORE_ID;
var ACCESS_TOKEN;
var API_VERSION = 'v3';
var BASE_URL = 'https://app.ecwid.com/api/' + API_VERSION + '/';
var METHOD = {
GET: 'get',
POST: 'post',
PUT: 'put',
DELETE: 'delete'
};
var PATH = {
profile: 'profile',
products: 'products',
orders: 'orders',
customers: 'customers',
categories: 'categories',
classes: 'classes',
storage: 'storage',
orders: 'orders'
};
function ecwid(storeId, accessToken) {
if (!storeId) throw new Error('StoreID is required');
if (!accessToken) throw new Error('Access token is required');
STORE_ID = storeId;
ACCESS_TOKEN = accessToken;
return {
getClasses,
getStoreProfile,
getOrderDetails,
searchProducts,
getProducts,
getProduct,
addProduct,
deleteProduct,
updateProduct,
uploadProductImage,
uploadProductImageExternal,
deleteProductImage,
uploadGalleryImage,
uploadGalleryImageExternal,
cleanGallery,
getCategories,
addCategory,
deleteCategory,
updateCategory,
searchOrders,
getOrderDetails,
updateOrder,
deleteOrder,
searchCustomers,
getCustomer,
createCustomer,
updateCustomer,
deleteCustomer,
getAllStorage,
getStorage,
addStorage,
editStorage,
deleteStorage
};
}
function getClasses() {
return exec(PATH.classes, METHOD.GET);
}
function getStoreProfile() {
return exec(PATH.profile, METHOD.GET);
}
function getOrderDetails(orderId) {
return exec(PATH.orders + '/' + orderId, METHOD.GET);
}
function searchProducts(options) {
return exec(PATH.products, METHOD.GET, options);
}
function getProducts(options) {
return exec(PATH.products, METHOD.GET, options);
}
function getProduct(productId) {
return exec(PATH.products + '/' + productId, METHOD.GET);
}
function addProduct(product) {
return exec(PATH.products, METHOD.POST, product);
}
function deleteProduct(productId) {
return exec(PATH.products + '/' + productId, METHOD.DELETE);
}
function updateProduct(productId, product) {
return exec(PATH.products + '/' + productId, METHOD.PUT, product);
}
function uploadProductImage(productId, buffer) {
return request.post({
uri: buildURL(PATH.products + '/' + productId + '/image'),
headers: { 'content-type': 'image/jpeg' },
body: buffer
});
}
function uploadProductImageExternal(productId, externalUrl) {
return exec(PATH.products + '/' + productId + '/image?externalUrl=' +
encodeURIComponent(externalUrl), METHOD.POST);
}
function deleteProductImage(productId) {
return exec(PATH.products + '/' + productId + '/image', METHOD.DELETE);
}
function uploadGalleryImage(productId, buffer) {
return request.post({
uri: buildURL(PATH.products + '/' + productId + '/gallery'),
headers: { 'content-type': 'image/jpeg' },
body: buffer
});
}
function uploadGalleryImageExternal(productId, externalUrl) {
return exec(PATH.products + '/' + productId + '/gallery?externalUrl=' +
encodeURIComponent(externalUrl), METHOD.POST);
}
function cleanGallery(productId) {
return exec(PATH.products + '/' + productId + '/gallery', METHOD.DELETE);
}
function searchOrders(options) {
return exec(PATH.orders, METHOD.GET, options);
}
function getOrderDetails(orderNumber) {
return exec(PATH.orders + '/' + orderNumber, METHOD.GET);
}
function updateOrder(orderNumber, data) {
return exec(PATH.orders + '/' + orderNumber, METHOD.PUT, data);
}
function deleteOrder(orderNumber) {
return exec(PATH.orders + '/' + orderNumber, METHOD.DELETE);
}
function getCategories(options) {
return exec(PATH.categories, METHOD.GET, options);
}
function addCategory(category) {
return exec(PATH.categories, METHOD.POST, category);
}
function deleteCategory(categoryId) {
return exec(PATH.categories + '/' + categoryId, METHOD.DELETE);
}
function updateCategory(categoryId, data) {
return exec(PATH.categories + '/' + categoryId, METHOD.PUT, data);
}
function searchCustomers(options) {
return exec(PATH.customers, METHOD.GET, options);
}
function getCustomer(customerId) {
return exec(PATH.customers + '/' + customerId, METHOD.GET);
}
function createCustomer(data) {
return exec(PATH.customers, METHOD.POST, data);
}
function updateCustomer(customerId, data) {
return exec(PATH.customers + '/' + customerId, METHOD.PUT, data);
}
function deleteCustomer(customerId) {
return exec(PATH.customers + '/' + customerId, METHOD.DELETE);
}
function getAllStorage() {
return exec(PATH.storage, METHOD.GET);
}
function getStorage(key) {
return exec(PATH.storage + '/' + key, METHOD.GET);
}
function addStorage(key, data) {
return exec(PATH.storage + '/' + key, METHOD.POST, data);
}
function editStorage(key, data) {
return exec(PATH.storage + '/' + key, METHOD.PUT, data);
}
function deleteStorage(key) {
return exec(PATH.storage + '/' + key, METHOD.DELETE);
}
function buildURL(path) {
return (
BASE_URL +
STORE_ID +
'/' +
path +
(path.includes('?') ? '&' : '?') +
qs.stringify({ token: ACCESS_TOKEN })
);
}
function exec(path, method, data) {
var options = {
headers: {
'Content-Type': 'application/json;charset=utf-8',
'Cache-Control': 'no-cache'
}
};
switch (method) {
case METHOD.GET:
case METHOD.DELETE:
options.uri = buildURL(path);
if (data) {
options.uri += '&' + qs.stringify(data);
}
break;
case METHOD.PUT:
case METHOD.POST:
options.uri = buildURL(path);
if (data) {
options.body = JSON.stringify(data);
}
break;
}
return request[method](options).then(function (data) {
return JSON.parse(data);
});
}
module.exports = ecwid;