UNPKG

@solana8800/sun_ecommerce_mcp

Version:

Model Context Protocol server for Sun eCommerce Platform (Pure JavaScript) - enables AI assistants to understand and control the complete eCommerce system

1,625 lines (1,472 loc) 36.4 kB
import axios from 'axios'; /** * Sun eCommerce API Client - Pure JavaScript Implementation * Provides a comprehensive interface to interact with the Sun eCommerce Platform API * * @class SunEcommerceApiClient */ export class SunEcommerceApiClient { /** * Creates an instance of SunEcommerceApiClient * @param {Object} config - Configuration object * @param {string} config.baseUrl - Base URL of the API * @param {string} config.apiVersion - API version (default: 'v1') * @param {number} config.timeout - Request timeout in milliseconds * @param {number} config.retries - Number of retry attempts * @param {string} config.authToken - Authentication token * @param {boolean} config.enableLogging - Enable request/response logging */ constructor(config) { this.config = config; this.client = axios.create({ baseURL: `${config.baseUrl}/api/${config.apiVersion}`, timeout: config.timeout, headers: { 'Content-Type': 'application/json', Accept: 'application/json', ...(config.authToken && { Authorization: `Bearer ${config.authToken}`, }), }, }); this.setupInterceptors(); } /** * Sets up request and response interceptors for logging and error handling * @private */ setupInterceptors() { // Request interceptor this.client.interceptors.request.use( (config) => { if (this.config.enableLogging) { console.log( `[API Request] ${config.method?.toUpperCase()} ${config.url}`, ); } return config; }, (error) => { if (this.config.enableLogging) { console.error('[API Request Error]', error); } return Promise.reject(error); }, ); // Response interceptor this.client.interceptors.response.use( (response) => { if (this.config.enableLogging) { console.log( `[API Response] ${response.status} ${response.config.url}`, ); } return response; }, (error) => { if (this.config.enableLogging) { console.error( '[API Response Error]', error.response?.data || error.message, ); } return Promise.reject(error); }, ); } /** * Generic request method with retry logic and exponential backoff * @private * @param {Object} config - Axios request configuration * @returns {Promise<any>} Response data */ async request(config) { let lastError; for (let attempt = 1; attempt <= this.config.retries; attempt++) { try { const response = await this.client.request(config); return response.data; } catch (error) { lastError = error; if (attempt === this.config.retries) { break; } // Wait before retry (exponential backoff) const delay = Math.pow(2, attempt - 1) * 1000; await new Promise((resolve) => setTimeout(resolve, delay)); } } throw lastError; } // ==================== PRODUCT API METHODS ==================== /** * Creates a new product * @param {Object} data - Product data * @returns {Promise<any>} Created product */ async createProduct(data) { return this.request({ method: 'POST', url: '/products', data, }); } /** * Gets a product by ID * @param {string} id - Product ID * @param {Object} params - Query parameters * @returns {Promise<any>} Product data */ async getProduct(id, params) { return this.request({ method: 'GET', url: `/products/${id}`, params, }); } /** * Searches for products * @param {Object} params - Search parameters * @returns {Promise<any>} Search results */ async searchProducts(params) { return this.request({ method: 'GET', url: '/products', params, }); } /** * Updates a product * @param {string} id - Product ID * @param {Object} data - Updated product data * @returns {Promise<any>} Updated product */ async updateProduct(id, data) { return this.request({ method: 'PUT', url: `/products/${id}`, data, }); } /** * Deletes a product * @param {string} id - Product ID * @returns {Promise<any>} Deletion result */ async deleteProduct(id) { return this.request({ method: 'DELETE', url: `/products/${id}`, }); } /** * Gets a product by handle/slug * @param {string} handle - Product handle * @returns {Promise<any>} Product data */ async getProductByHandle(handle) { return this.request({ method: 'GET', url: `/products/handle/${handle}`, }); } // ==================== CATEGORY API METHODS ==================== /** * Creates a new category * @param {Object} data - Category data * @returns {Promise<any>} Created category */ async createCategory(data) { return this.request({ method: 'POST', url: '/categories', data, }); } /** * Gets a category by ID * @param {string} id - Category ID * @returns {Promise<any>} Category data */ async getCategory(id) { return this.request({ method: 'GET', url: `/categories/${id}`, }); } /** * Lists all categories * @param {Object} params - Query parameters * @returns {Promise<any>} Categories list */ async listCategories(params) { return this.request({ method: 'GET', url: '/categories', params, }); } /** * Gets the category tree structure * @returns {Promise<any>} Category tree */ async getCategoryTree() { return this.request({ method: 'GET', url: '/categories/tree', }); } /** * Updates a category * @param {string} id - Category ID * @param {Object} data - Updated category data * @returns {Promise<any>} Updated category */ async updateCategory(id, data) { return this.request({ method: 'PUT', url: `/categories/${id}`, data, }); } /** * Deletes a category * @param {string} id - Category ID * @returns {Promise<any>} Deletion result */ async deleteCategory(id) { return this.request({ method: 'DELETE', url: `/categories/${id}`, }); } // ==================== PRICING RULES API METHODS ==================== /** * Creates a new pricing rule * @param {Object} data - Pricing rule data * @returns {Promise<any>} Created pricing rule */ async createPricingRule(data) { return this.request({ method: 'POST', url: '/pricing-rules', data, }); } /** * Gets a pricing rule by ID * @param {string} id - Pricing rule ID * @returns {Promise<any>} Pricing rule data */ async getPricingRule(id) { return this.request({ method: 'GET', url: `/pricing-rules/${id}`, }); } /** * Lists all pricing rules * @param {Object} params - Query parameters * @returns {Promise<any>} Pricing rules list */ async listPricingRules(params) { return this.request({ method: 'GET', url: '/pricing-rules', params, }); } /** * Applies pricing rules to calculate final prices * @param {Object} data - Pricing calculation data * @returns {Promise<any>} Calculated prices */ async applyPricingRules(data) { return this.request({ method: 'POST', url: '/pricing-rules/apply', data, }); } /** * Validates a pricing rule * @param {Object} data - Pricing rule data to validate * @returns {Promise<any>} Validation result */ async validatePricingRule(data) { return this.request({ method: 'POST', url: '/pricing-rules/validate', data, }); } /** * Updates a pricing rule * @param {string} id - Pricing rule ID * @param {Object} data - Updated pricing rule data * @returns {Promise<any>} Updated pricing rule */ async updatePricingRule(id, data) { return this.request({ method: 'PUT', url: `/pricing-rules/${id}`, data, }); } /** * Deletes a pricing rule * @param {string} id - Pricing rule ID * @returns {Promise<any>} Deletion result */ async deletePricingRule(id) { return this.request({ method: 'DELETE', url: `/pricing-rules/${id}`, }); } /** * Gets a pricing rule by name * @param {string} name - Pricing rule name * @returns {Promise<any>} Pricing rule data */ async getPricingRuleByName(name) { return this.request({ method: 'GET', url: `/pricing-rules/name/${name}`, }); } /** * Updates pricing rule status (active/inactive) * @param {string} id - Pricing rule ID * @param {boolean} isActive - Active status * @returns {Promise<any>} Updated pricing rule */ async updatePricingRuleStatus(id, isActive) { return this.request({ method: 'PATCH', url: `/pricing-rules/${id}/status`, data: { isActive }, }); } /** * Gets active pricing rules * @param {Object} params - Query parameters * @returns {Promise<any>} Active pricing rules */ async getActivePricingRules(params) { return this.request({ method: 'GET', url: '/pricing-rules/active', params, }); } /** * Bulk calculates prices for multiple items * @param {Object} data - Bulk pricing data * @returns {Promise<any>} Calculated prices */ async bulkCalculatePrice(data) { return this.request({ method: 'POST', url: '/pricing-rules/bulk-calculate', data, }); } /** * Gets pricing rules by priority * @param {number} priority - Priority level * @returns {Promise<any>} Pricing rules */ async getPricingRulesByPriority(priority) { return this.request({ method: 'GET', url: `/pricing-rules/priority/${priority}`, }); } /** * Bulk updates pricing rule status * @param {string[]} ruleIds - Array of pricing rule IDs * @param {boolean} isActive - Active status * @returns {Promise<any>} Update result */ async bulkUpdatePricingRuleStatus(ruleIds, isActive) { return this.request({ method: 'PATCH', url: '/pricing-rules/bulk-status', data: { ruleIds, isActive }, }); } /** * Gets pricing rule statistics * @param {string} id - Pricing rule ID * @returns {Promise<any>} Rule statistics */ async getPricingRuleStats(id) { return this.request({ method: 'GET', url: `/pricing-rules/${id}/stats`, }); } /** * Duplicates a pricing rule * @param {string} id - Pricing rule ID to duplicate * @param {string} newName - Name for the new rule * @returns {Promise<any>} Duplicated pricing rule */ async duplicatePricingRule(id, newName) { return this.request({ method: 'POST', url: `/pricing-rules/${id}/duplicate`, data: { newName }, }); } // ==================== CART API METHODS ==================== /** * Creates a new cart * @param {Object} data - Cart data * @returns {Promise<any>} Created cart */ async createCart(data) { return this.request({ method: 'POST', url: '/carts', data, }); } /** * Gets a cart by ID * @param {string} id - Cart ID * @returns {Promise<any>} Cart data */ async getCart(id) { return this.request({ method: 'GET', url: `/carts/${id}`, }); } /** * Adds an item to cart * @param {string} cartId - Cart ID * @param {Object} data - Item data * @returns {Promise<any>} Updated cart */ async addCartItem(cartId, data) { return this.request({ method: 'POST', url: `/carts/${cartId}/items`, data, }); } /** * Updates a cart item * @param {string} cartId - Cart ID * @param {string} itemId - Item ID * @param {Object} data - Updated item data * @returns {Promise<any>} Updated cart */ async updateCartItem(cartId, itemId, data) { return this.request({ method: 'PUT', url: `/carts/${cartId}/items/${itemId}`, data, }); } /** * Removes an item from cart * @param {string} cartId - Cart ID * @param {string} itemId - Item ID * @returns {Promise<any>} Updated cart */ async removeCartItem(cartId, itemId) { return this.request({ method: 'DELETE', url: `/carts/${cartId}/items/${itemId}`, }); } /** * Gets cart summary with totals * @param {string} cartId - Cart ID * @returns {Promise<any>} Cart summary */ async getCartSummary(cartId) { return this.request({ method: 'GET', url: `/carts/${cartId}/summary`, }); } /** * Gets cart items * @param {string} cartId - Cart ID * @param {Object} params - Query parameters * @returns {Promise<any>} Cart items */ async getCartItems(cartId, params) { return this.request({ method: 'GET', url: `/carts/${cartId}/items`, params, }); } /** * Clears all items from cart * @param {string} cartId - Cart ID * @returns {Promise<any>} Empty cart */ async clearCart(cartId) { return this.request({ method: 'DELETE', url: `/carts/${cartId}/items`, }); } // ==================== INVENTORY API METHODS ==================== /** * Creates inventory record * @param {Object} data - Inventory data * @returns {Promise<any>} Created inventory */ async createInventory(data) { return this.request({ method: 'POST', url: '/inventory', data, }); } /** * Gets inventory by ID * @param {string} id - Inventory ID * @returns {Promise<any>} Inventory data */ async getInventory(id) { return this.request({ method: 'GET', url: `/inventory/${id}`, }); } /** * Lists inventory records * @param {Object} params - Query parameters * @returns {Promise<any>} Inventory list */ async listInventory(params) { return this.request({ method: 'GET', url: '/inventory', params, }); } /** * Updates inventory * @param {string} id - Inventory ID * @param {Object} data - Updated inventory data * @returns {Promise<any>} Updated inventory */ async updateInventory(id, data) { return this.request({ method: 'PUT', url: `/inventory/${id}`, data, }); } /** * Deletes inventory record * @param {string} id - Inventory ID * @returns {Promise<any>} Deletion result */ async deleteInventory(id) { return this.request({ method: 'DELETE', url: `/inventory/${id}`, }); } /** * Bulk updates inventory records * @param {Object} data - Bulk update data * @returns {Promise<any>} Update result */ async bulkUpdateInventory(data) { return this.request({ method: 'PUT', url: '/inventory/bulk-update', data, }); } /** * Reserves inventory * @param {Object} data - Reservation data * @returns {Promise<any>} Reservation result */ async reserveInventory(data) { return this.request({ method: 'POST', url: '/inventory/reserve', data, }); } /** * Releases inventory reservation * @param {Object} data - Release data * @returns {Promise<any>} Release result */ async releaseInventoryReservation(data) { return this.request({ method: 'POST', url: '/inventory/release', data, }); } /** * Checks inventory availability * @param {Object} data - Availability check data * @returns {Promise<any>} Availability result */ async checkInventoryAvailability(data) { return this.request({ method: 'POST', url: '/inventory/check-availability', data, }); } /** * Gets inventory movements * @param {string} inventoryId - Inventory ID * @param {Object} params - Query parameters * @returns {Promise<any>} Inventory movements */ async getInventoryMovements(inventoryId, params) { return this.request({ method: 'GET', url: `/inventory/${inventoryId}/movements`, params, }); } /** * Gets inventory statistics * @param {Object} params - Query parameters * @returns {Promise<any>} Inventory statistics */ async getInventoryStatistics(params) { return this.request({ method: 'GET', url: '/inventory/statistics', params, }); } /** * Gets inventory by product ID * @param {string} productId - Product ID * @returns {Promise<any>} Inventory data */ async getInventoryByProduct(productId) { return this.request({ method: 'GET', url: `/inventory/product/${productId}`, }); } // ==================== MEDIA API METHODS ==================== /** * Uploads media file * @param {Object} data - Media upload data * @returns {Promise<any>} Uploaded media */ async uploadMedia(data) { return this.request({ method: 'POST', url: '/media/upload', data, headers: { 'Content-Type': 'multipart/form-data', }, }); } /** * Gets media by ID * @param {string} id - Media ID * @returns {Promise<any>} Media data */ async getMedia(id) { return this.request({ method: 'GET', url: `/media/${id}`, }); } /** * Lists media files * @param {Object} params - Query parameters * @returns {Promise<any>} Media list */ async listMedia(params) { return this.request({ method: 'GET', url: '/media', params, }); } /** * Updates media metadata * @param {string} id - Media ID * @param {Object} data - Updated media data * @returns {Promise<any>} Updated media */ async updateMedia(id, data) { return this.request({ method: 'PUT', url: `/media/${id}`, data, }); } /** * Deletes media file * @param {string} id - Media ID * @returns {Promise<any>} Deletion result */ async deleteMedia(id) { return this.request({ method: 'DELETE', url: `/media/${id}`, }); } // ==================== PARTNER API METHODS ==================== /** * Creates a new partner * @param {Object} data - Partner data * @returns {Promise<any>} Created partner */ async createPartner(data) { return this.request({ method: 'POST', url: '/partners', data, }); } /** * Gets a partner by ID * @param {string} id - Partner ID * @returns {Promise<any>} Partner data */ async getPartner(id) { return this.request({ method: 'GET', url: `/partners/${id}`, }); } /** * Lists all partners * @param {Object} params - Query parameters * @returns {Promise<any>} Partners list */ async listPartners(params) { return this.request({ method: 'GET', url: '/partners', params, }); } /** * Updates a partner * @param {string} id - Partner ID * @param {Object} data - Updated partner data * @returns {Promise<any>} Updated partner */ async updatePartner(id, data) { return this.request({ method: 'PUT', url: `/partners/${id}`, data, }); } /** * Deletes a partner * @param {string} id - Partner ID * @returns {Promise<any>} Deletion result */ async deletePartner(id) { return this.request({ method: 'DELETE', url: `/partners/${id}`, }); } /** * Gets partner by code * @param {string} code - Partner code * @returns {Promise<any>} Partner data */ async getPartnerByCode(code) { return this.request({ method: 'GET', url: `/partners/code/${code}`, }); } /** * Activates a partner * @param {string} id - Partner ID * @returns {Promise<any>} Activated partner */ async activatePartner(id) { return this.request({ method: 'POST', url: `/partners/${id}/activate`, }); } /** * Deactivates a partner * @param {string} id - Partner ID * @returns {Promise<any>} Deactivated partner */ async deactivatePartner(id) { return this.request({ method: 'POST', url: `/partners/${id}/deactivate`, }); } /** * Gets partner statistics * @param {string} id - Partner ID * @returns {Promise<any>} Partner statistics */ async getPartnerStatistics(id) { return this.request({ method: 'GET', url: `/partners/${id}/statistics`, }); } /** * Gets partner balance * @param {string} id - Partner ID * @returns {Promise<any>} Partner balance */ async getPartnerBalance(id) { return this.request({ method: 'GET', url: `/partners/${id}/balance`, }); } /** * Gets partner tier benefits * @param {string} id - Partner ID * @returns {Promise<any>} Partner tier benefits */ async getPartnerTierBenefits(id) { return this.request({ method: 'GET', url: `/partners/${id}/tier-benefits`, }); } /** * Searches partners * @param {Object} params - Search parameters * @returns {Promise<any>} Search results */ async searchPartners(params) { return this.request({ method: 'GET', url: '/partners/search', params, }); } /** * Gets partners by type * @param {string} type - Partner type * @param {Object} params - Query parameters * @returns {Promise<any>} Partners by type */ async getPartnersByType(type, params) { return this.request({ method: 'GET', url: `/partners/type/${type}`, params, }); } /** * Gets partners by tier * @param {string} tier - Partner tier * @param {Object} params - Query parameters * @returns {Promise<any>} Partners by tier */ async getPartnersByTier(tier, params) { return this.request({ method: 'GET', url: `/partners/tier/${tier}`, params, }); } // ==================== LAND API METHODS ==================== /** * Creates a new land * @param {Object} data - Land data * @returns {Promise<any>} Created land */ async createLand(data) { return this.request({ method: 'POST', url: '/lands', data, }); } /** * Gets a land by ID * @param {string} id - Land ID * @returns {Promise<any>} Land data */ async getLand(id) { return this.request({ method: 'GET', url: `/lands/${id}`, }); } /** * Lists all lands * @param {Object} params - Query parameters * @returns {Promise<any>} Lands list */ async listLands(params) { return this.request({ method: 'GET', url: '/lands', params, }); } /** * Updates a land * @param {string} id - Land ID * @param {Object} data - Updated land data * @returns {Promise<any>} Updated land */ async updateLand(id, data) { return this.request({ method: 'PUT', url: `/lands/${id}`, data, }); } /** * Deletes a land * @param {string} id - Land ID * @returns {Promise<any>} Deletion result */ async deleteLand(id) { return this.request({ method: 'DELETE', url: `/lands/${id}`, }); } /** * Gets land by code * @param {string} code - Land code * @returns {Promise<any>} Land data */ async getLandByCode(code) { return this.request({ method: 'GET', url: `/lands/code/${code}`, }); } /** * Gets lands by partner * @param {string} partnerId - Partner ID * @returns {Promise<any>} Lands data */ async getLandsByPartner(partnerId) { return this.request({ method: 'GET', url: `/lands/partner/${partnerId}`, }); } /** * Gets land statistics * @param {string} id - Land ID * @returns {Promise<any>} Land statistics */ async getLandStatistics(id) { return this.request({ method: 'GET', url: `/lands/${id}/statistics`, }); } /** * Activates a land * @param {string} id - Land ID * @returns {Promise<any>} Activated land */ async activateLand(id) { return this.request({ method: 'POST', url: `/lands/${id}/activate`, }); } /** * Deactivates a land * @param {string} id - Land ID * @returns {Promise<any>} Deactivated land */ async deactivateLand(id) { return this.request({ method: 'POST', url: `/lands/${id}/deactivate`, }); } // ==================== SALES CHANNEL API METHODS ==================== /** * Creates a new sales channel * @param {Object} data - Sales channel data * @returns {Promise<any>} Created sales channel */ async createSalesChannel(data) { return this.request({ method: 'POST', url: '/sales-channels', data, }); } /** * Gets a sales channel by ID * @param {string} id - Sales channel ID * @returns {Promise<any>} Sales channel data */ async getSalesChannel(id) { return this.request({ method: 'GET', url: `/sales-channels/${id}`, }); } /** * Gets a sales channel by code * @param {string} code - Sales channel code * @returns {Promise<any>} Sales channel data */ async getSalesChannelByCode(code) { return this.request({ method: 'GET', url: `/sales-channels/code/${code}`, }); } /** * Lists all sales channels * @param {Object} params - Query parameters * @returns {Promise<any>} Sales channels list */ async listSalesChannels(params) { return this.request({ method: 'GET', url: '/sales-channels', params, }); } /** * Updates a sales channel * @param {string} id - Sales channel ID * @param {Object} data - Updated sales channel data * @returns {Promise<any>} Updated sales channel */ async updateSalesChannel(id, data) { return this.request({ method: 'PUT', url: `/sales-channels/${id}`, data, }); } /** * Deletes a sales channel * @param {string} id - Sales channel ID * @returns {Promise<any>} Deletion result */ async deleteSalesChannel(id) { return this.request({ method: 'DELETE', url: `/sales-channels/${id}`, }); } /** * Activates a sales channel * @param {string} id - Sales channel ID * @returns {Promise<any>} Activated sales channel */ async activateSalesChannel(id) { return this.request({ method: 'POST', url: `/sales-channels/${id}/activate`, }); } /** * Deactivates a sales channel * @param {string} id - Sales channel ID * @returns {Promise<any>} Deactivated sales channel */ async deactivateSalesChannel(id) { return this.request({ method: 'POST', url: `/sales-channels/${id}/deactivate`, }); } /** * Gets sales channel statistics * @param {string} id - Sales channel ID * @returns {Promise<any>} Channel statistics */ async getSalesChannelStatistics(id) { return this.request({ method: 'GET', url: `/sales-channels/${id}/statistics`, }); } /** * Gets sales channels by type * @param {string} type - Channel type * @param {Object} params - Query parameters * @returns {Promise<any>} Sales channels by type */ async getSalesChannelsByType(type, params) { return this.request({ method: 'GET', url: `/sales-channels/type/${type}`, params, }); } /** * Gets active sales channels * @param {Object} params - Query parameters * @returns {Promise<any>} Active sales channels */ async getActiveSalesChannels(params) { return this.request({ method: 'GET', url: '/sales-channels/active', params, }); } /** * Searches sales channels * @param {Object} params - Search parameters * @returns {Promise<any>} Search results */ async searchSalesChannels(params) { return this.request({ method: 'GET', url: '/sales-channels/search', params, }); } /** * Gets sales channel configuration * @param {string} id - Sales channel ID * @returns {Promise<any>} Channel configuration */ async getSalesChannelConfiguration(id) { return this.request({ method: 'GET', url: `/sales-channels/${id}/configuration`, }); } /** * Updates sales channel configuration * @param {string} id - Sales channel ID * @param {Object} data - Configuration data * @returns {Promise<any>} Updated configuration */ async updateSalesChannelConfiguration(id, data) { return this.request({ method: 'PUT', url: `/sales-channels/${id}/configuration`, data, }); } // ==================== TRANSLATION API METHODS ==================== /** * Creates a translation * @param {Object} data - Translation data * @returns {Promise<any>} Created translation */ async createTranslation(data) { return this.request({ method: 'POST', url: '/translations', data, }); } /** * Gets a translation * @param {string} entityId - Entity ID * @param {string} languageCode - Language code * @returns {Promise<any>} Translation data */ async getTranslation(entityId, languageCode) { return this.request({ method: 'GET', url: `/translations/${entityId}/${languageCode}`, }); } /** * Gets supported languages * @returns {Promise<any>} Supported languages */ async getSupportedLanguages() { return this.request({ method: 'GET', url: '/translations/languages', }); } // Product Translation Methods async createProductTranslation(data) { return this.request({ method: 'POST', url: '/translations/products', data, }); } async getProductTranslation(productId, language) { return this.request({ method: 'GET', url: `/translations/products/${productId}/${language}`, }); } async updateProductTranslation(productId, language, data) { return this.request({ method: 'PUT', url: `/translations/products/${productId}/${language}`, data, }); } async deleteProductTranslation(productId, language) { return this.request({ method: 'DELETE', url: `/translations/products/${productId}/${language}`, }); } async listProductTranslations(productId) { return this.request({ method: 'GET', url: `/translations/products/${productId}`, }); } // Category Translation Methods async createCategoryTranslation(data) { return this.request({ method: 'POST', url: '/translations/categories', data, }); } async getCategoryTranslation(categoryId, language) { return this.request({ method: 'GET', url: `/translations/categories/${categoryId}/${language}`, }); } async updateCategoryTranslation(categoryId, language, data) { return this.request({ method: 'PUT', url: `/translations/categories/${categoryId}/${language}`, data, }); } async deleteCategoryTranslation(categoryId, language) { return this.request({ method: 'DELETE', url: `/translations/categories/${categoryId}/${language}`, }); } async listCategoryTranslations(categoryId) { return this.request({ method: 'GET', url: `/translations/categories/${categoryId}`, }); } // Product Attribute Translation Methods async createProductAttributeTranslation(data) { return this.request({ method: 'POST', url: '/translations/product-attributes', data, }); } async getProductAttributeTranslation(attributeId, language) { return this.request({ method: 'GET', url: `/translations/product-attributes/${attributeId}/${language}`, }); } async updateProductAttributeTranslation(attributeId, language, data) { return this.request({ method: 'PUT', url: `/translations/product-attributes/${attributeId}/${language}`, data, }); } async deleteProductAttributeTranslation(attributeId, language) { return this.request({ method: 'DELETE', url: `/translations/product-attributes/${attributeId}/${language}`, }); } async listProductAttributeTranslations(attributeId) { return this.request({ method: 'GET', url: `/translations/product-attributes/${attributeId}`, }); } // Product Variant Translation Methods async createProductVariantTranslation(data) { return this.request({ method: 'POST', url: '/translations/product-variants', data, }); } async getProductVariantTranslation(variantId, language) { return this.request({ method: 'GET', url: `/translations/product-variants/${variantId}/${language}`, }); } async updateProductVariantTranslation(variantId, language, data) { return this.request({ method: 'PUT', url: `/translations/product-variants/${variantId}/${language}`, data, }); } async deleteProductVariantTranslation(variantId, language) { return this.request({ method: 'DELETE', url: `/translations/product-variants/${variantId}/${language}`, }); } async listProductVariantTranslations(variantId) { return this.request({ method: 'GET', url: `/translations/product-variants/${variantId}`, }); } // Bulk Translation Methods async bulkCreateTranslations(translations) { return this.request({ method: 'POST', url: '/translations/bulk', data: { translations }, }); } async bulkDeleteTranslations(translations) { return this.request({ method: 'DELETE', url: '/translations/bulk', data: { translations }, }); } async getTranslationStats(params) { return this.request({ method: 'GET', url: '/translations/stats', params, }); } // ==================== ATTRIBUTE API METHODS ==================== async createAttribute(data) { return this.request({ method: 'POST', url: '/attributes', data, }); } async getAttribute(id) { return this.request({ method: 'GET', url: `/attributes/${id}`, }); } async listAttributes(params) { return this.request({ method: 'GET', url: '/attributes', params, }); } async createAttributeValue(attributeId, data) { return this.request({ method: 'POST', url: `/attributes/${attributeId}/values`, data, }); } async getAttributeValues(attributeId) { return this.request({ method: 'GET', url: `/attributes/${attributeId}/values`, }); } async getAttributeByName(name) { return this.request({ method: 'GET', url: `/attributes/name/${name}`, }); } async updateAttribute(id, data) { return this.request({ method: 'PUT', url: `/attributes/${id}`, data, }); } async deleteAttribute(id) { return this.request({ method: 'DELETE', url: `/attributes/${id}`, }); } async updateAttributeValue(attributeId, valueId, data) { return this.request({ method: 'PUT', url: `/attributes/${attributeId}/values/${valueId}`, data, }); } async deleteAttributeValue(attributeId, valueId) { return this.request({ method: 'DELETE', url: `/attributes/${attributeId}/values/${valueId}`, }); } async bulkCreateAttributeValues(attributeId, values) { return this.request({ method: 'POST', url: `/attributes/${attributeId}/values/bulk`, data: { values }, }); } async getAttributeUsage(id) { return this.request({ method: 'GET', url: `/attributes/${id}/usage`, }); } // ==================== SYSTEM API METHODS ==================== /** * Performs health check * @returns {Promise<any>} Health status */ async healthCheck() { return this.request({ method: 'GET', url: '/health', }); } /** * Gets system health status * @returns {Promise<any>} Health status */ async getSystemHealth() { return this.request({ method: 'GET', url: '/health', }); } /** * Gets system information * @returns {Promise<any>} System info */ async getSystemInfo() { return this.request({ method: 'GET', url: '/system/info', }); } }