@hubcommerce/trendyol 1.0.1 → 1.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  Bu proje [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) formatını izler.
4
4
  Sürümleme [Semantic Versioning](https://semver.org/spec/v2.0.0.html) uyumludur.
5
5
 
6
+ ## [1.1.0] - 2026-10-06
7
+
8
+ ### Changed
9
+
10
+ - `PriceAndInventoryItem`: `quantity`, `salePrice` ve `listPrice` opsiyonel. Trendyol yalnızca stok veya yalnızca fiyat güncellemesinde diğer alanı zorunlu tutmaz ([Stock and Price Update](https://developers.trendyol.com/tr/v3.0/docs/9-stock-and-price-update)).
11
+
12
+ ### Fixed
13
+
14
+ - `updatePriceAndInventory` yalnızca stok gönderen satırları reddediyordu; bu yüzden stok senkronu yerel fiyatı Trendyol'a yazmak zorunda kalıyordu. Artık en az bir alan (stok veya fiyat çifti) yeterli; fiyat gönderilirse `salePrice` ve `listPrice` birlikte doğrulanır.
15
+
6
16
  ## [1.0.1] - 2026-08-28
7
17
 
8
18
  ### Fixed
package/README.md CHANGED
@@ -108,6 +108,9 @@ const result = await client.inventory.updatePriceAndInventory([
108
108
  ]);
109
109
 
110
110
  // quantity: 0 → satış durabilir (JSDoc uyarısı)
111
+
112
+ // Yalnızca stok (fiyat Trendyol'da olduğu gibi kalır)
113
+ await client.inventory.updatePriceAndInventory([{ barcode: "8683772071724", quantity: 4 }]);
111
114
  ```
112
115
 
113
116
  ### Ürün oluşturma + batch poll
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/inventory/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EACV,qBAAqB,EACrB,+BAA+B,EAChC,MAAM,uBAAuB,CAAC;AAI/B,KAAK,gBAAgB,GAAG;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAEjD;;;;;;GAMG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,cAAc;IAGzC;;;;OAIG;IACH,uBAAuB,CACrB,KAAK,EAAE,qBAAqB,EAAE,EAC9B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,cAAc,CAAC,+BAA+B,CAAC,CAAC;CAuC5D"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/inventory/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EACV,qBAAqB,EACrB,+BAA+B,EAChC,MAAM,uBAAuB,CAAC;AAI/B,KAAK,gBAAgB,GAAG;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAEjD;;;;;;GAMG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,cAAc;IAGzC;;;;OAIG;IACH,uBAAuB,CACrB,KAAK,EAAE,qBAAqB,EAAE,EAC9B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,cAAc,CAAC,+BAA+B,CAAC,CAAC;CA2D5D"}
@@ -25,13 +25,31 @@ export class InventoryApi {
25
25
  return Promise.resolve(batchValidation);
26
26
  }
27
27
  for (const item of items) {
28
- const quantityValidation = validateQuantity(item.quantity);
29
- if (!quantityValidation.ok) {
30
- return Promise.resolve(quantityValidation);
28
+ const hasQuantity = item.quantity !== undefined;
29
+ const hasPrice = item.salePrice !== undefined || item.listPrice !== undefined;
30
+ if (!hasQuantity && !hasPrice) {
31
+ return Promise.resolve({
32
+ ok: false,
33
+ reason: "quantity veya salePrice/listPrice alanlarindan en az biri gonderilmelidir.",
34
+ });
35
+ }
36
+ if (hasQuantity) {
37
+ const quantityValidation = validateQuantity(item.quantity);
38
+ if (!quantityValidation.ok) {
39
+ return Promise.resolve(quantityValidation);
40
+ }
31
41
  }
32
- const priceValidation = validatePrices(item.listPrice, item.salePrice);
33
- if (!priceValidation.ok) {
34
- return Promise.resolve(priceValidation);
42
+ if (hasPrice) {
43
+ if (item.salePrice === undefined || item.listPrice === undefined) {
44
+ return Promise.resolve({
45
+ ok: false,
46
+ reason: "Fiyat guncellemesinde salePrice ve listPrice birlikte gonderilmelidir.",
47
+ });
48
+ }
49
+ const priceValidation = validatePrices(item.listPrice, item.salePrice);
50
+ if (!priceValidation.ok) {
51
+ return Promise.resolve(priceValidation);
52
+ }
35
53
  }
36
54
  if (!item.barcode.trim()) {
37
55
  return Promise.resolve({
@@ -1,9 +1,15 @@
1
- /** Tek SKU stok/fiyat guncelleme satiri. */
1
+ /**
2
+ * Tek SKU stok/fiyat guncelleme satiri.
3
+ *
4
+ * Trendyol: yalnizca stok veya yalnizca fiyat guncellenirken diger alanin
5
+ * gonderilmesi zorunlu degildir. En az biri (quantity veya fiyat) bulunmalidir.
6
+ * Fiyat gonderilecekse salePrice ve listPrice birlikte gonderilir.
7
+ */
2
8
  export type PriceAndInventoryItem = {
3
9
  barcode: string;
4
- quantity: number;
5
- salePrice: number;
6
- listPrice: number;
10
+ quantity?: number;
11
+ salePrice?: number;
12
+ listPrice?: number;
7
13
  };
8
14
  export type UpdatePriceAndInventoryResponse = {
9
15
  batchRequestId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"inventory.d.ts","sourceRoot":"","sources":["../../src/types/inventory.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC"}
1
+ {"version":3,"file":"inventory.d.ts","sourceRoot":"","sources":["../../src/types/inventory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hubcommerce/trendyol",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "Trendyol TR Marketplace API SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",