@kerekit/shoprenter-api
v1.1.1
Published
Shoprenter API client
Readme
Shoprenter API client
See available resources and other documentation here: https://doc.shoprenter.hu/api/address.html
Install
npm install @kerekit/shoprenter-apiUsage
Init
import Client from "@kerekit/shoprenter-api"
const api = new Client (
"http://shopname.api.myshoprenter.hu/", // Note the trailing slash!
"user",
"pass"
)Basic CRUD operations
// Fetch 10 active products
const activeProducts = await api.get ("productExtend", {
full: 1,
published: 1,
limit: 10,
})
// Disable those products
for (const p of activeProducts.items) {
await api.put (`products/${p.id}`, {status: "0"})
}
// Upload a file
const filePath = "test/red-square.png"
await api.post ("files", {
filePath,
type: "image",
attachment: "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA1BMVEX/AAAZ4gk3AAAADElEQVQI12NgIA0AAAAwAAHHqoWOAAAAAElFTkSuQmCC",
})
// Delete it right away
await api.delete ("files", {type: "image", filePath})Get items from all pages
Instead of manually making requests to each page and concatenating items, you can simply do:
const allProducts = await api.getAll ("products", {full: 1})
const allSkus = []
for (const product of allProducts) {
allSkus.push (product.sku)
}Mapper
Instead of extracting item data after fetching all pages, you can pass a mapper function to do it as soon as possible. This simplifies code and can reduce memory usage on large datasets:
const allSkus = await api.getAll ("products", {full: 1}, {mapper: p => p.sku})Disable batch processing
Batch processing is used by default for the fastest results. You can turn it off however for lower memory consumption:
const allProducts = await api.getAll ("products", {full: 1}, {inBatches: false})Iteration callback
You can keep track of the progress by passing an iteration callback:
// Callback args refer to batches: zero-based index, count is always known.
const allProducts = await api.getAll (
"products",
{full: 1},
{
beforeIteration: (batchIndex, batchCount) => {
console.log (`Processing batch ${batchIndex + 1}/${batchCount}...`)
// Processing batch 1/4...
// Processing batch 2/4...
// Processing batch 3/4...
// Processing batch 4/4...
},
}
)
// When disabling batches, args refer to pages. Count is undefined at start.
const allProducts = await api.getAll (
"products",
{full: 1},
{
inBatches: false,
beforeIteration: (page, pageCount) => {
console.log (`Processing page ${page + 1}/${pageCount || "?"}...`)
// Processing batch 1/?...
// Processing batch 2/4...
// Processing batch 3/4...
// Processing batch 4/4...
},
}
)