Adapters

Salla

Salla platform adapter — maps Salla's API to the unified CommerceAdapter interface.

The @commercejs/adapter-salla package implements the CommerceAdapter interface for Salla, the leading eCommerce platform in Saudi Arabia and the MENA region.

Installation

pnpm add @commercejs/adapter-salla

Configuration

import { createSallaAdapter } from '@commercejs/adapter-salla'

const adapter = createSallaAdapter({
  token: 'your-salla-api-token',
  baseUrl: 'https://api.salla.dev/admin/v2',
})
OptionTypeRequiredDescription
tokenstringYesSalla API access token
baseUrlstringNoAPI base URL

Supported Domains

The adapter implements these sub-adapters:

DomainMethodsStatus
CataloggetProducts, getProduct, getCategories✅ Implemented
CartgetCart, addToCart, removeFromCart, updateCartItem✅ Implemented
CustomergetCustomer, login, register✅ Implemented
OrdergetOrders, getOrder, createOrder, getOrderStatus, getOrderHistory✅ Implemented
StoregetStoreInfo✅ Implemented
BrandgetBrands, getBrand✅ Implemented
CountrygetCountries✅ Implemented

Data Mapping

The adapter transforms Salla's API responses into unified CommerceJS types. Key mappings:

Product Mapping

Salla FieldCommerceJS FieldNotes
namenameWrapped in LocalizedString
regular_price.amountprice.amountNormalized to DiscountablePrice
sale_price.amountprice.compareAtAmountOriginal price before discount
images[].urlimages[].urlMapped to Image type
optionsoptionsMapped to ProductOption
skusvariantsMapped to ProductVariant

Order Status Mapping

Salla StatusCommerceJS Status
createdpending
in_progressprocessing
completeddelivered
cancelledcancelled
refundedrefunded

Usage Examples

Fetch Products

const products = await adapter.catalog.getProducts({
  limit: 10,
  page: 1,
})
// Returns PaginatedResult<Product>

Get Single Product

const product = await adapter.catalog.getProduct('product-123')
// Returns Product with variants, images, options

Fetch Orders

const orders = await adapter.order.getOrders({
  limit: 20,
  page: 1,
})
// Returns PaginatedResult<Order>

Get Order Timeline

const history = await adapter.order.getOrderHistory('order-456')
// Returns OrderHistoryEntry[] - status changes with timestamps

Error Handling

The adapter wraps Salla API errors in CommerceError:

import { isCommerceError } from '@commercejs/types'

try {
  await adapter.catalog.getProduct('nonexistent')
} catch (err) {
  if (isCommerceError(err)) {
    // err.code === 'NOT_FOUND'
    // err.message === 'Product not found'
  }
}