@commercejs/adapter-salla 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/__tests__/adapter.contract.test.d.ts +2 -0
  2. package/dist/__tests__/adapter.contract.test.d.ts.map +1 -0
  3. package/dist/__tests__/adapter.contract.test.js +228 -0
  4. package/dist/__tests__/adapter.contract.test.js.map +1 -0
  5. package/dist/__tests__/mappers.test.d.ts +2 -0
  6. package/dist/__tests__/mappers.test.d.ts.map +1 -0
  7. package/dist/__tests__/mappers.test.js +512 -0
  8. package/dist/__tests__/mappers.test.js.map +1 -0
  9. package/dist/adapter.d.ts +85 -0
  10. package/dist/adapter.d.ts.map +1 -0
  11. package/dist/adapter.js +492 -0
  12. package/dist/adapter.js.map +1 -0
  13. package/dist/client.d.ts +43 -0
  14. package/dist/client.d.ts.map +1 -0
  15. package/dist/client.js +162 -0
  16. package/dist/client.js.map +1 -0
  17. package/dist/index.d.ts +6 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +7 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/mappers/brand.d.ts +4 -0
  22. package/dist/mappers/brand.d.ts.map +1 -0
  23. package/dist/mappers/brand.js +20 -0
  24. package/dist/mappers/brand.js.map +1 -0
  25. package/dist/mappers/category.d.ts +5 -0
  26. package/dist/mappers/category.d.ts.map +1 -0
  27. package/dist/mappers/category.js +25 -0
  28. package/dist/mappers/category.js.map +1 -0
  29. package/dist/mappers/country.d.ts +4 -0
  30. package/dist/mappers/country.d.ts.map +1 -0
  31. package/dist/mappers/country.js +14 -0
  32. package/dist/mappers/country.js.map +1 -0
  33. package/dist/mappers/customer.d.ts +7 -0
  34. package/dist/mappers/customer.d.ts.map +1 -0
  35. package/dist/mappers/customer.js +45 -0
  36. package/dist/mappers/customer.js.map +1 -0
  37. package/dist/mappers/index.d.ts +12 -0
  38. package/dist/mappers/index.d.ts.map +1 -0
  39. package/dist/mappers/index.js +15 -0
  40. package/dist/mappers/index.js.map +1 -0
  41. package/dist/mappers/location.d.ts +4 -0
  42. package/dist/mappers/location.d.ts.map +1 -0
  43. package/dist/mappers/location.js +44 -0
  44. package/dist/mappers/location.js.map +1 -0
  45. package/dist/mappers/order-status.d.ts +7 -0
  46. package/dist/mappers/order-status.d.ts.map +1 -0
  47. package/dist/mappers/order-status.js +38 -0
  48. package/dist/mappers/order-status.js.map +1 -0
  49. package/dist/mappers/order.d.ts +5 -0
  50. package/dist/mappers/order.d.ts.map +1 -0
  51. package/dist/mappers/order.js +141 -0
  52. package/dist/mappers/order.js.map +1 -0
  53. package/dist/mappers/payment.d.ts +5 -0
  54. package/dist/mappers/payment.d.ts.map +1 -0
  55. package/dist/mappers/payment.js +20 -0
  56. package/dist/mappers/payment.js.map +1 -0
  57. package/dist/mappers/product.d.ts +5 -0
  58. package/dist/mappers/product.d.ts.map +1 -0
  59. package/dist/mappers/product.js +143 -0
  60. package/dist/mappers/product.js.map +1 -0
  61. package/dist/mappers/review.d.ts +5 -0
  62. package/dist/mappers/review.d.ts.map +1 -0
  63. package/dist/mappers/review.js +17 -0
  64. package/dist/mappers/review.js.map +1 -0
  65. package/dist/mappers/shipping.d.ts +5 -0
  66. package/dist/mappers/shipping.d.ts.map +1 -0
  67. package/dist/mappers/shipping.js +20 -0
  68. package/dist/mappers/shipping.js.map +1 -0
  69. package/dist/types.d.ts +472 -0
  70. package/dist/types.d.ts.map +1 -0
  71. package/dist/types.js +5 -0
  72. package/dist/types.js.map +1 -0
  73. package/package.json +32 -0
@@ -0,0 +1,492 @@
1
+ // ---------------------------------------------------------------------------
2
+ // SallaAdapter — maps Salla Merchant API v2 → CommerceAdapter contract
3
+ // ---------------------------------------------------------------------------
4
+ import { CommerceError, } from '@commercejs/types';
5
+ import { SallaClient } from './client.js';
6
+ import { mapSallaProduct, mapSallaCategory, mapSallaCustomer, mapSallaOrder, mapSallaOrderStatus, mapSallaOrderHistory, mapSallaReview, mapSallaShipping, mapSallaPayment, mapSallaBrand, mapSallaCountry, mapSallaBranch, } from './mappers/index.js';
7
+ // ---------------------------------------------------------------------------
8
+ // Helpers
9
+ // ---------------------------------------------------------------------------
10
+ function notImplemented(method) {
11
+ throw new CommerceError(`SallaAdapter.${method}() is not supported by the Salla platform`, 'NOT_SUPPORTED', 501);
12
+ }
13
+ function toLocalized(value, locale = 'ar') {
14
+ if (locale === 'en')
15
+ return { ar: '', en: value };
16
+ return { ar: value, en: '' };
17
+ }
18
+ // ---------------------------------------------------------------------------
19
+ // Adapter
20
+ // ---------------------------------------------------------------------------
21
+ export class SallaAdapter {
22
+ name = 'salla';
23
+ client;
24
+ locale;
25
+ /**
26
+ * Domains this adapter actually supports (methods won't throw NOT_SUPPORTED).
27
+ * Used by consumers to check capability before calling.
28
+ */
29
+ capabilities = [
30
+ 'catalog',
31
+ 'orders',
32
+ 'store',
33
+ 'promotions',
34
+ 'reviews',
35
+ 'brands',
36
+ 'countries',
37
+ 'locations',
38
+ 'customers', // partial: register + read via API
39
+ ];
40
+ constructor(config) {
41
+ this.client = new SallaClient(config);
42
+ this.locale = config.locale ?? 'ar';
43
+ }
44
+ // ========================================================================
45
+ // CatalogAdapter
46
+ // ========================================================================
47
+ async getProduct(params) {
48
+ const id = params.id ?? params.slug;
49
+ if (!id)
50
+ throw new CommerceError('Product ID or slug is required', 'VALIDATION', 422);
51
+ const res = await this.client.get(`/products/${id}`);
52
+ return mapSallaProduct(res.data, this.locale);
53
+ }
54
+ async getProducts(params) {
55
+ const query = {};
56
+ if (params.query)
57
+ query.keyword = params.query;
58
+ if (params.categoryId)
59
+ query.category_id = params.categoryId;
60
+ if (params.page)
61
+ query.page = params.page;
62
+ if (params.perPage)
63
+ query.per_page = params.perPage;
64
+ if (params.sort) {
65
+ query.sort_by = params.sort.field;
66
+ query.sort_order = params.sort.direction;
67
+ }
68
+ const paginated = await this.client.paginated('/products', query);
69
+ return {
70
+ products: {
71
+ items: paginated.data.map((p) => mapSallaProduct(p, this.locale)),
72
+ total: paginated.total,
73
+ page: paginated.page,
74
+ perPage: paginated.perPage,
75
+ hasMore: paginated.page < paginated.totalPages,
76
+ },
77
+ facets: [],
78
+ suggestions: null,
79
+ };
80
+ }
81
+ async getCategories(params) {
82
+ const query = {};
83
+ if (params?.parentId)
84
+ query.parent_id = params.parentId;
85
+ const res = await this.client.get('/categories', query);
86
+ return res.data.map((c) => mapSallaCategory(c, this.locale));
87
+ }
88
+ // ========================================================================
89
+ // CartAdapter — NOT SUPPORTED (Salla has no storefront cart REST API)
90
+ // ========================================================================
91
+ async createCart() { return notImplemented('createCart'); }
92
+ async getCart(_cartId) { return notImplemented('getCart'); }
93
+ async addToCart(_cartId, _item) { return notImplemented('addToCart'); }
94
+ async updateCartItem(_cartId, _itemId, _quantity) { return notImplemented('updateCartItem'); }
95
+ async removeFromCart(_cartId, _itemId) { return notImplemented('removeFromCart'); }
96
+ async applyCoupon(_cartId, _code) { return notImplemented('applyCoupon'); }
97
+ async removeCoupon(_cartId) { return notImplemented('removeCoupon'); }
98
+ // ========================================================================
99
+ // CheckoutAdapter
100
+ // ========================================================================
101
+ async getShippingMethods(_cartId) {
102
+ try {
103
+ const res = await this.client.get('/shipping/companies');
104
+ return res.data.map((s) => mapSallaShipping(s, this.locale));
105
+ }
106
+ catch {
107
+ // shipping scope may not be granted — return empty
108
+ return [];
109
+ }
110
+ }
111
+ async setShippingAddress(_cartId, _address) {
112
+ return notImplemented('setShippingAddress');
113
+ }
114
+ async setBillingAddress(_cartId, _address) {
115
+ return notImplemented('setBillingAddress');
116
+ }
117
+ async setShippingMethod(_cartId, _methodId) {
118
+ return notImplemented('setShippingMethod');
119
+ }
120
+ async getPaymentMethods(_cartId) {
121
+ const res = await this.client.get('/payment/methods');
122
+ return res.data.map((p) => mapSallaPayment(p, this.locale));
123
+ }
124
+ async setPaymentMethod(_cartId, _methodId) {
125
+ return notImplemented('setPaymentMethod');
126
+ }
127
+ async placeOrder(_cartId) {
128
+ return notImplemented('placeOrder');
129
+ }
130
+ // ========================================================================
131
+ // CustomerAdapter
132
+ // ========================================================================
133
+ async login(_email, _password) {
134
+ // Salla Merchant API doesn't support customer login — auth is via OAuth
135
+ return notImplemented('login');
136
+ }
137
+ async register(input) {
138
+ const res = await this.client.post('/customers', {
139
+ first_name: input.firstName,
140
+ last_name: input.lastName,
141
+ email: input.email,
142
+ mobile: input.phone,
143
+ });
144
+ return mapSallaCustomer(res.data);
145
+ }
146
+ async getCustomer() {
147
+ // Salla Merchant API doesn't have a "me" endpoint —
148
+ // this requires a customer ID which we'd get from session context.
149
+ // For now, throw until we have session management.
150
+ return notImplemented('getCustomer');
151
+ }
152
+ async updateCustomer(input) {
153
+ // Requires customer ID from session context
154
+ // When session management is added, this will use PUT /customers/{id}
155
+ return notImplemented('updateCustomer');
156
+ }
157
+ async logout() {
158
+ // OAuth — token revocation handled externally
159
+ }
160
+ async forgotPassword(_email) {
161
+ return notImplemented('forgotPassword');
162
+ }
163
+ async resetPassword(_token, _newPassword) {
164
+ return notImplemented('resetPassword');
165
+ }
166
+ async getAddresses() {
167
+ // Requires customer ID from session context
168
+ return notImplemented('getAddresses');
169
+ }
170
+ async addAddress(_address) {
171
+ return notImplemented('addAddress');
172
+ }
173
+ async updateAddress(_addressId, _address) {
174
+ return notImplemented('updateAddress');
175
+ }
176
+ async deleteAddress(_addressId) {
177
+ return notImplemented('deleteAddress');
178
+ }
179
+ // ========================================================================
180
+ // OrderAdapter
181
+ // ========================================================================
182
+ async createOrder(input) {
183
+ // Build Salla's POST /orders payload
184
+ const body = {
185
+ // Items
186
+ items: input.items.map((item) => ({
187
+ product_id: Number(item.productId),
188
+ quantity: item.quantity,
189
+ ...(item.variantId ? { variant_id: Number(item.variantId) } : {}),
190
+ ...(item.notes ? { note: item.notes } : {}),
191
+ })),
192
+ // Shipping address
193
+ shipping: {
194
+ company_id: input.shippingMethodId ? Number(input.shippingMethodId) : undefined,
195
+ address: {
196
+ country: input.shippingAddress.country,
197
+ city: input.shippingAddress.city,
198
+ street: input.shippingAddress.street,
199
+ ...(input.shippingAddress.street2 ? { block: input.shippingAddress.street2 } : {}),
200
+ ...(input.shippingAddress.postalCode ? { postal_code: input.shippingAddress.postalCode } : {}),
201
+ },
202
+ },
203
+ // Payment method
204
+ ...(input.payment ? { payment_method: input.payment.methodId } : {}),
205
+ // Note
206
+ ...(input.note ? { note: input.note } : {}),
207
+ };
208
+ // Customer ID or receiver (guest)
209
+ if (input.customerId) {
210
+ body.customer_id = Number(input.customerId);
211
+ }
212
+ else if (input.receiver) {
213
+ body.receiver = {
214
+ name: `${input.receiver.firstName} ${input.receiver.lastName}`,
215
+ email: input.receiver.email,
216
+ ...(input.receiver.phone ? { phone: input.receiver.phone } : {}),
217
+ };
218
+ }
219
+ // Coupon
220
+ if (input.couponCode) {
221
+ body.coupon = input.couponCode;
222
+ }
223
+ const res = await this.client.post('/orders', body);
224
+ return mapSallaOrder(res.data, this.locale);
225
+ }
226
+ async getCustomerOrders(params) {
227
+ const paginated = await this.client.paginated('/orders', {
228
+ page: params?.page,
229
+ perPage: params?.perPage,
230
+ });
231
+ return {
232
+ items: paginated.data.map((o) => mapSallaOrder(o, this.locale)),
233
+ total: paginated.total,
234
+ page: paginated.page,
235
+ perPage: paginated.perPage,
236
+ hasMore: paginated.page < paginated.totalPages,
237
+ };
238
+ }
239
+ async getOrder(orderId) {
240
+ const res = await this.client.get(`/orders/${orderId}`);
241
+ return mapSallaOrder(res.data, this.locale);
242
+ }
243
+ async getOrderStatuses() {
244
+ const res = await this.client.get('/orders/statuses');
245
+ return res.data.map(mapSallaOrderStatus);
246
+ }
247
+ async updateOrderStatus(orderId, input) {
248
+ await this.client.post(`/orders/${orderId}/status`, {
249
+ slug: input.status,
250
+ ...(input.note ? { note: input.note } : {}),
251
+ ...(input.restoreItems !== undefined ? { restore_items: input.restoreItems } : {}),
252
+ });
253
+ }
254
+ async cancelOrder(orderId, note) {
255
+ await this.updateOrderStatus(orderId, {
256
+ status: 'canceled',
257
+ note,
258
+ restoreItems: true,
259
+ });
260
+ }
261
+ async duplicateOrder(orderId) {
262
+ const res = await this.client.post('/orders/duplicate', {
263
+ order_id: Number(orderId),
264
+ });
265
+ return mapSallaOrder(res.data, this.locale);
266
+ }
267
+ async getOrderHistory(orderId) {
268
+ const res = await this.client.get('/orders/histories', {
269
+ order_id: orderId,
270
+ });
271
+ return res.data.map((h) => mapSallaOrderHistory(h, orderId));
272
+ }
273
+ // ========================================================================
274
+ // WishlistAdapter — NOT SUPPORTED
275
+ // ========================================================================
276
+ async getWishlist() { return notImplemented('getWishlist'); }
277
+ async addToWishlist(_productId, _variantId) { return notImplemented('addToWishlist'); }
278
+ async removeFromWishlist(_itemId) { return notImplemented('removeFromWishlist'); }
279
+ // ========================================================================
280
+ // ReviewAdapter
281
+ // ========================================================================
282
+ async getProductReviews(productId, params) {
283
+ // Salla reviews are store-wide at /reviews — we filter by product_id
284
+ const paginated = await this.client.paginated('/reviews', {
285
+ page: params?.page,
286
+ perPage: params?.perPage,
287
+ product_id: productId,
288
+ });
289
+ return {
290
+ items: paginated.data.map(mapSallaReview),
291
+ total: paginated.total,
292
+ page: paginated.page,
293
+ perPage: paginated.perPage,
294
+ hasMore: paginated.page < paginated.totalPages,
295
+ };
296
+ }
297
+ async getReviewSummary(productId) {
298
+ const all = await this.getProductReviews(productId, { page: 1, perPage: 100 });
299
+ const distribution = [0, 0, 0, 0, 0];
300
+ let totalRating = 0;
301
+ for (const review of all.items) {
302
+ if (review.rating >= 1 && review.rating <= 5) {
303
+ distribution[review.rating - 1]++;
304
+ totalRating += review.rating;
305
+ }
306
+ }
307
+ return {
308
+ productId,
309
+ averageRating: all.total > 0 ? totalRating / all.total : 0,
310
+ totalCount: all.total,
311
+ distribution,
312
+ };
313
+ }
314
+ async submitReview(input) {
315
+ // Salla may not support review submission via API — try anyway
316
+ try {
317
+ const res = await this.client.post(`/products/${input.productId}/reviews`, {
318
+ rating: input.rating,
319
+ content: input.body ?? '',
320
+ });
321
+ return mapSallaReview(res.data);
322
+ }
323
+ catch {
324
+ return notImplemented('submitReview');
325
+ }
326
+ }
327
+ // ========================================================================
328
+ // StoreAdapter
329
+ // ========================================================================
330
+ async getStoreInfo() {
331
+ const [storeRes, currencyRes] = await Promise.all([
332
+ this.client.get('/store/info'),
333
+ this.client.get('/currencies'),
334
+ ]);
335
+ const store = storeRes.data;
336
+ const currencies = currencyRes.data;
337
+ return {
338
+ name: { ar: store.name, en: store.name },
339
+ description: store.description ? { ar: store.description, en: store.description } : null,
340
+ logo: store.logo ? { url: store.logo, alt: store.name } : null,
341
+ currencies: currencies.map((c) => ({
342
+ code: c.code,
343
+ symbol: c.symbol,
344
+ isDefault: c.is_default,
345
+ })),
346
+ locales: [
347
+ { code: 'ar', name: 'العربية', direction: 'rtl', isDefault: true },
348
+ { code: 'en', name: 'English', direction: 'ltr', isDefault: false },
349
+ ],
350
+ country: 'SA',
351
+ };
352
+ }
353
+ // ========================================================================
354
+ // PromotionAdapter
355
+ // ========================================================================
356
+ async getActivePromotions() {
357
+ const res = await this.client.get('/coupons');
358
+ return res.data
359
+ .filter((c) => c.status === 'active')
360
+ .map((c) => ({
361
+ id: String(c.id),
362
+ name: toLocalized(c.code, this.locale),
363
+ description: null,
364
+ discountType: c.type === 'percentage' ? 'percentage' : 'fixed_amount',
365
+ discountValue: c.amount,
366
+ currency: c.type !== 'percentage' ? 'SAR' : null,
367
+ maxDiscount: c.maximum_amount ? { amount: c.maximum_amount, currency: 'SAR', formatted: `${c.maximum_amount.toFixed(2)} SAR` } : null,
368
+ target: 'order',
369
+ conditions: {
370
+ minPurchaseAmount: c.minimum_amount ? { amount: c.minimum_amount, currency: 'SAR', formatted: `${c.minimum_amount.toFixed(2)} SAR` } : null,
371
+ minItemCount: null,
372
+ productIds: null,
373
+ categoryIds: null,
374
+ firstOrderOnly: false,
375
+ },
376
+ startsAt: c.start_date ?? new Date().toISOString(),
377
+ endsAt: c.expiry_date,
378
+ isActive: true,
379
+ requiresCoupon: true,
380
+ usageLimitPerCustomer: null,
381
+ usageLimitTotal: c.usage_limit,
382
+ }));
383
+ }
384
+ async validateCoupon(code) {
385
+ const res = await this.client.get('/coupons', { code });
386
+ const coupon = res.data.find((c) => c.code.toLowerCase() === code.toLowerCase());
387
+ if (!coupon) {
388
+ throw new CommerceError(`Coupon "${code}" not found`, 'VALIDATION', 404);
389
+ }
390
+ const promotion = {
391
+ id: String(coupon.id),
392
+ name: toLocalized(coupon.code, this.locale),
393
+ description: null,
394
+ discountType: coupon.type === 'percentage' ? 'percentage' : 'fixed_amount',
395
+ discountValue: coupon.amount,
396
+ currency: coupon.type !== 'percentage' ? 'SAR' : null,
397
+ maxDiscount: coupon.maximum_amount ? { amount: coupon.maximum_amount, currency: 'SAR', formatted: `${coupon.maximum_amount.toFixed(2)} SAR` } : null,
398
+ target: 'order',
399
+ conditions: {
400
+ minPurchaseAmount: coupon.minimum_amount ? { amount: coupon.minimum_amount, currency: 'SAR', formatted: `${coupon.minimum_amount.toFixed(2)} SAR` } : null,
401
+ minItemCount: null,
402
+ productIds: null,
403
+ categoryIds: null,
404
+ firstOrderOnly: false,
405
+ },
406
+ startsAt: coupon.start_date ?? new Date().toISOString(),
407
+ endsAt: coupon.expiry_date,
408
+ isActive: coupon.status === 'active',
409
+ requiresCoupon: true,
410
+ usageLimitPerCustomer: null,
411
+ usageLimitTotal: coupon.usage_limit,
412
+ };
413
+ return {
414
+ id: String(coupon.id),
415
+ code: coupon.code,
416
+ promotion,
417
+ isValid: coupon.status === 'active',
418
+ invalidReason: coupon.status !== 'active' ? coupon.status : null,
419
+ timesUsed: coupon.usage_count,
420
+ };
421
+ }
422
+ // ========================================================================
423
+ // ReturnAdapter — NOT SUPPORTED
424
+ // ========================================================================
425
+ async createReturn(_input) { return notImplemented('createReturn'); }
426
+ async getReturns(_params) { return notImplemented('getReturns'); }
427
+ async getReturn(_returnId) { return notImplemented('getReturn'); }
428
+ async cancelReturn(_returnId) { return notImplemented('cancelReturn'); }
429
+ // ========================================================================
430
+ // WholesaleAdapter — PARTIAL (customer groups only)
431
+ // ========================================================================
432
+ async getCustomerGroups() {
433
+ const res = await this.client.get('/customers/groups');
434
+ return res.data.map((g) => ({
435
+ id: String(g.id),
436
+ code: String(g.id),
437
+ name: toLocalized(g.name, this.locale),
438
+ isWholesale: false,
439
+ defaultDiscount: 0,
440
+ minimumOrderValue: null,
441
+ }));
442
+ }
443
+ async createQuote(_input) { return notImplemented('createQuote'); }
444
+ async getQuotes(_params) { return notImplemented('getQuotes'); }
445
+ async getQuote(_quoteId) { return notImplemented('getQuote'); }
446
+ async acceptQuote(_quoteId) { return notImplemented('acceptQuote'); }
447
+ async rejectQuote(_quoteId) { return notImplemented('rejectQuote'); }
448
+ // ========================================================================
449
+ // AuctionAdapter — NOT SUPPORTED
450
+ // ========================================================================
451
+ async placeBid(_input) { return notImplemented('placeBid'); }
452
+ async getBids(_productId, _params) { return notImplemented('getBids'); }
453
+ async getWinningBid(_productId) { return notImplemented('getWinningBid'); }
454
+ // ========================================================================
455
+ // RentalAdapter — NOT SUPPORTED
456
+ // ========================================================================
457
+ async checkAvailability(_productId, _startDate, _endDate) { return notImplemented('checkAvailability'); }
458
+ async createBooking(_input) { return notImplemented('createBooking'); }
459
+ async getBookings(_params) { return notImplemented('getBookings'); }
460
+ async getBooking(_bookingId) { return notImplemented('getBooking'); }
461
+ async cancelBooking(_bookingId) { return notImplemented('cancelBooking'); }
462
+ // ========================================================================
463
+ // GiftCardAdapter — NOT SUPPORTED
464
+ // ========================================================================
465
+ async purchaseGiftCard(_input) { return notImplemented('purchaseGiftCard'); }
466
+ async getGiftCardBalance(_code) { return notImplemented('getGiftCardBalance'); }
467
+ async redeemGiftCard(_input) { return notImplemented('redeemGiftCard'); }
468
+ async getMyGiftCards() { return notImplemented('getMyGiftCards'); }
469
+ async getGiftCardTransactions(_giftCardId) { return notImplemented('getGiftCardTransactions'); }
470
+ // ========================================================================
471
+ // BrandAdapter
472
+ // ========================================================================
473
+ async getBrands() {
474
+ const res = await this.client.get('/brands');
475
+ return res.data.map((b) => mapSallaBrand(b, this.locale));
476
+ }
477
+ // ========================================================================
478
+ // CountryAdapter
479
+ // ========================================================================
480
+ async getCountries() {
481
+ const res = await this.client.get('/countries');
482
+ return res.data.map(mapSallaCountry);
483
+ }
484
+ // ========================================================================
485
+ // LocationAdapter
486
+ // ========================================================================
487
+ async getStoreLocations() {
488
+ const res = await this.client.get('/branches');
489
+ return res.data.map((b) => mapSallaBranch(b, this.locale));
490
+ }
491
+ }
492
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { SallaConfig, SallaApiResponse } from './types.js';
2
+ export declare class SallaClient {
3
+ private http;
4
+ readonly config: SallaConfig;
5
+ private _accessToken;
6
+ private _refreshPromise;
7
+ constructor(config: SallaConfig);
8
+ private createHttpClient;
9
+ /** Whether this client has the credentials needed for token refresh */
10
+ get canRefresh(): boolean;
11
+ /**
12
+ * Refresh the OAuth access token using the refresh token.
13
+ * Uses a mutex so concurrent 401s only trigger one refresh.
14
+ */
15
+ refreshAccessToken(): Promise<string>;
16
+ private _doRefresh;
17
+ /**
18
+ * Execute a request. If it fails with 401 and refresh credentials
19
+ * are available, refresh the token and retry once.
20
+ */
21
+ private withRefreshRetry;
22
+ /** GET request — returns the unwrapped response from Salla's response envelope */
23
+ get<T>(path: string, query?: Record<string, unknown>): Promise<SallaApiResponse<T>>;
24
+ /** POST request */
25
+ post<T>(path: string, body?: Record<string, unknown>): Promise<SallaApiResponse<T>>;
26
+ /** PUT request */
27
+ put<T>(path: string, body?: Record<string, unknown>): Promise<SallaApiResponse<T>>;
28
+ /** DELETE request */
29
+ delete<T>(path: string): Promise<SallaApiResponse<T>>;
30
+ /** Fetch a paginated list from Salla and return data + pagination */
31
+ paginated<T>(path: string, params?: {
32
+ page?: number;
33
+ perPage?: number;
34
+ [key: string]: unknown;
35
+ }): Promise<{
36
+ data: T[];
37
+ total: number;
38
+ page: number;
39
+ perPage: number;
40
+ totalPages: number;
41
+ }>;
42
+ }
43
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAM/D,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAQ;IACpB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAG5B,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,eAAe,CAA+B;gBAE1C,MAAM,EAAE,WAAW;IAS/B,OAAO,CAAC,gBAAgB;IAkCxB,uEAAuE;IACvE,IAAI,UAAU,IAAI,OAAO,CAGxB;IAED;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;YAuB7B,UAAU;IAoCxB;;;OAGG;YACW,gBAAgB;IAsB9B,kFAAkF;IAC5E,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAMzF,mBAAmB;IACb,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAMzF,kBAAkB;IACZ,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAMxF,qBAAqB;IACf,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAQ3D,qEAAqE;IAC/D,SAAS,CAAC,CAAC,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GACnE,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAmB5F"}