@things-factory/integration-marketplace 5.0.0-alpha.36 → 5.0.0-alpha.39

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 (118) hide show
  1. package/dist-server/controllers/index.js +1 -0
  2. package/dist-server/controllers/index.js.map +1 -1
  3. package/dist-server/controllers/magento/apis/get-store-order.js +20 -0
  4. package/dist-server/controllers/magento/apis/get-store-order.js.map +1 -0
  5. package/dist-server/controllers/magento/apis/get-store-orders.js +34 -4
  6. package/dist-server/controllers/magento/apis/get-store-orders.js.map +1 -1
  7. package/dist-server/controllers/magento/apis/get-store-product-categories.js +47 -0
  8. package/dist-server/controllers/magento/apis/get-store-product-categories.js.map +1 -0
  9. package/dist-server/controllers/magento/apis/get-store-products.js +29 -11
  10. package/dist-server/controllers/magento/apis/get-store-products.js.map +1 -1
  11. package/dist-server/controllers/magento/apis/get-store-stock-item.js +1 -1
  12. package/dist-server/controllers/magento/apis/get-store-stock-item.js.map +1 -1
  13. package/dist-server/controllers/magento/apis/index.js +5 -0
  14. package/dist-server/controllers/magento/apis/index.js.map +1 -1
  15. package/dist-server/controllers/magento/apis/update-order-status.js +82 -0
  16. package/dist-server/controllers/magento/apis/update-order-status.js.map +1 -0
  17. package/dist-server/controllers/magento/apis/update-store-product-price.js +28 -0
  18. package/dist-server/controllers/magento/apis/update-store-product-price.js.map +1 -0
  19. package/dist-server/controllers/magento/apis/update-store-product-stock.js +1 -1
  20. package/dist-server/controllers/magento/apis/update-store-product-stock.js.map +1 -1
  21. package/dist-server/controllers/magento/apis/update-store-product-variation-price.js +28 -0
  22. package/dist-server/controllers/magento/apis/update-store-product-variation-price.js.map +1 -0
  23. package/dist-server/controllers/magento/apis/update-store-product-variation-stock.js +1 -1
  24. package/dist-server/controllers/magento/apis/update-store-product-variation-stock.js.map +1 -1
  25. package/dist-server/controllers/magento/magento.js +4 -4
  26. package/dist-server/controllers/magento/magento.js.map +1 -1
  27. package/dist-server/controllers/magento/platform-action.js +1 -0
  28. package/dist-server/controllers/magento/platform-action.js.map +1 -1
  29. package/dist-server/controllers/store-api/index.js +14 -0
  30. package/dist-server/controllers/store-api/index.js.map +1 -1
  31. package/dist-server/controllers/tiktok/apis/echo.js +19 -0
  32. package/dist-server/controllers/tiktok/apis/echo.js.map +1 -0
  33. package/dist-server/controllers/tiktok/apis/get-store-order-document.js +27 -0
  34. package/dist-server/controllers/tiktok/apis/get-store-order-document.js.map +1 -0
  35. package/dist-server/controllers/tiktok/apis/get-store-order-package.js +47 -0
  36. package/dist-server/controllers/tiktok/apis/get-store-order-package.js.map +1 -0
  37. package/dist-server/controllers/tiktok/apis/get-store-order-packages.js +39 -0
  38. package/dist-server/controllers/tiktok/apis/get-store-order-packages.js.map +1 -0
  39. package/dist-server/controllers/tiktok/apis/get-store-order.js +138 -0
  40. package/dist-server/controllers/tiktok/apis/get-store-order.js.map +1 -0
  41. package/dist-server/controllers/tiktok/apis/get-store-orders.js +48 -0
  42. package/dist-server/controllers/tiktok/apis/get-store-orders.js.map +1 -0
  43. package/dist-server/controllers/tiktok/apis/get-store-product-attributes.js +30 -0
  44. package/dist-server/controllers/tiktok/apis/get-store-product-attributes.js.map +1 -0
  45. package/dist-server/controllers/tiktok/apis/get-store-product-categories.js +28 -0
  46. package/dist-server/controllers/tiktok/apis/get-store-product-categories.js.map +1 -0
  47. package/dist-server/controllers/tiktok/apis/get-store-product.js +91 -0
  48. package/dist-server/controllers/tiktok/apis/get-store-product.js.map +1 -0
  49. package/dist-server/controllers/tiktok/apis/get-store-products.js +36 -0
  50. package/dist-server/controllers/tiktok/apis/get-store-products.js.map +1 -0
  51. package/dist-server/controllers/tiktok/apis/index.js +30 -0
  52. package/dist-server/controllers/tiktok/apis/index.js.map +1 -0
  53. package/dist-server/controllers/tiktok/apis/update-order-status.js +28 -0
  54. package/dist-server/controllers/tiktok/apis/update-order-status.js.map +1 -0
  55. package/dist-server/controllers/tiktok/apis/update-store-product-variation-price.js +28 -0
  56. package/dist-server/controllers/tiktok/apis/update-store-product-variation-price.js.map +1 -0
  57. package/dist-server/controllers/tiktok/apis/update-store-product-variation-stock.js +32 -0
  58. package/dist-server/controllers/tiktok/apis/update-store-product-variation-stock.js.map +1 -0
  59. package/dist-server/controllers/tiktok/client/index.js +19 -0
  60. package/dist-server/controllers/tiktok/client/index.js.map +1 -0
  61. package/dist-server/controllers/tiktok/client/signature.js +63 -0
  62. package/dist-server/controllers/tiktok/client/signature.js.map +1 -0
  63. package/dist-server/controllers/tiktok/client/tiktok.js +113 -0
  64. package/dist-server/controllers/tiktok/client/tiktok.js.map +1 -0
  65. package/dist-server/controllers/tiktok/client/types.js +3 -0
  66. package/dist-server/controllers/tiktok/client/types.js.map +1 -0
  67. package/dist-server/controllers/tiktok/index.js +34 -0
  68. package/dist-server/controllers/tiktok/index.js.map +1 -0
  69. package/dist-server/controllers/tiktok/platform-action.js +50 -0
  70. package/dist-server/controllers/tiktok/platform-action.js.map +1 -0
  71. package/dist-server/controllers/woocommerce/apis/get-store-orders.js +2 -1
  72. package/dist-server/controllers/woocommerce/apis/get-store-orders.js.map +1 -1
  73. package/dist-server/controllers/woocommerce/apis/get-store-products.js +19 -8
  74. package/dist-server/controllers/woocommerce/apis/get-store-products.js.map +1 -1
  75. package/dist-server/controllers/woocommerce/apis/update-order-status.js +17 -15
  76. package/dist-server/controllers/woocommerce/apis/update-order-status.js.map +1 -1
  77. package/dist-server/controllers/woocommerce/apis/update-store-product-variation-price.js +1 -1
  78. package/dist-server/controllers/woocommerce/apis/update-store-product-variation-price.js.map +1 -1
  79. package/package.json +15 -15
  80. package/server/controllers/index.ts +1 -0
  81. package/server/controllers/magento/apis/get-store-order.ts +15 -0
  82. package/server/controllers/magento/apis/get-store-orders.ts +36 -4
  83. package/server/controllers/magento/apis/get-store-product-categories.ts +43 -0
  84. package/server/controllers/magento/apis/get-store-products.ts +35 -11
  85. package/server/controllers/magento/apis/get-store-stock-item.ts +1 -1
  86. package/server/controllers/magento/apis/index.ts +5 -0
  87. package/server/controllers/magento/apis/update-order-status.ts +81 -0
  88. package/server/controllers/magento/apis/update-store-product-price.ts +24 -0
  89. package/server/controllers/magento/apis/update-store-product-stock.ts +1 -1
  90. package/server/controllers/magento/apis/update-store-product-variation-price.ts +24 -0
  91. package/server/controllers/magento/apis/update-store-product-variation-stock.ts +1 -1
  92. package/server/controllers/magento/magento.ts +5 -4
  93. package/server/controllers/magento/platform-action.ts +1 -0
  94. package/server/controllers/store-api/index.ts +6 -0
  95. package/server/controllers/tiktok/apis/echo.ts +14 -0
  96. package/server/controllers/tiktok/apis/get-store-order-document.ts +26 -0
  97. package/server/controllers/tiktok/apis/get-store-order-package.ts +46 -0
  98. package/server/controllers/tiktok/apis/get-store-order-packages.ts +43 -0
  99. package/server/controllers/tiktok/apis/get-store-order.ts +171 -0
  100. package/server/controllers/tiktok/apis/get-store-orders.ts +53 -0
  101. package/server/controllers/tiktok/apis/get-store-product-attributes.ts +29 -0
  102. package/server/controllers/tiktok/apis/get-store-product-categories.ts +27 -0
  103. package/server/controllers/tiktok/apis/get-store-product.ts +95 -0
  104. package/server/controllers/tiktok/apis/get-store-products.ts +38 -0
  105. package/server/controllers/tiktok/apis/index.ts +13 -0
  106. package/server/controllers/tiktok/apis/update-order-status.ts +24 -0
  107. package/server/controllers/tiktok/apis/update-store-product-variation-price.ts +24 -0
  108. package/server/controllers/tiktok/apis/update-store-product-variation-stock.ts +28 -0
  109. package/server/controllers/tiktok/client/index.ts +2 -0
  110. package/server/controllers/tiktok/client/signature.ts +78 -0
  111. package/server/controllers/tiktok/client/tiktok.ts +153 -0
  112. package/server/controllers/tiktok/client/types.ts +20 -0
  113. package/server/controllers/tiktok/index.ts +8 -0
  114. package/server/controllers/tiktok/platform-action.ts +54 -0
  115. package/server/controllers/woocommerce/apis/get-store-orders.ts +2 -1
  116. package/server/controllers/woocommerce/apis/get-store-products.ts +35 -24
  117. package/server/controllers/woocommerce/apis/update-order-status.ts +18 -14
  118. package/server/controllers/woocommerce/apis/update-store-product-variation-price.ts +1 -1
@@ -0,0 +1,171 @@
1
+ /* https://bytedance.feishu.cn/docs/doccnDyz5Bbk26iOdejbBRBlLrb#ytBXoS */
2
+
3
+ import { StoreAPI } from '../../store-api'
4
+
5
+ // Delivery Option: STANDARD, EXPRESS, ECONOMY, SEND_BY_SELLER
6
+
7
+ const documentStatuses = [112, 121, 122, 130]
8
+
9
+ export function getStoreOrder() {
10
+ return {
11
+ method: 'post',
12
+ path: '/api/orders/detail/query',
13
+ denormalize(req) {
14
+ var { orderId } = req || {}
15
+
16
+ let orderIds = Array.isArray(orderId) ? orderId : [orderId]
17
+
18
+ return { payload: { order_id_list: orderIds } }
19
+ },
20
+ async normalize(res, { store }) {
21
+ const { data } = res
22
+ const orderList = data.order_list
23
+
24
+ let results: any[] = []
25
+ for (let i = 0; i < orderList.length; i++) {
26
+ const order: any = orderList[i]
27
+ const {
28
+ order_id: name,
29
+ order_id: orderNo,
30
+ payment_method: paymentMethod,
31
+ payment_info: paymentInfo,
32
+ order_status: status,
33
+ ext_status: extStatus,
34
+ create_time,
35
+ update_time,
36
+ rts_sla,
37
+ recipient_address: recipientAddress,
38
+ item_list: itemList,
39
+ package_list: packageList,
40
+ delivery_option: deliveryOption
41
+ } = order
42
+
43
+ let orderStatus: string = `ttk_${status}`
44
+ switch (extStatus) {
45
+ case 201:
46
+ case 203:
47
+ orderStatus = `ttk_${extStatus}`
48
+ break
49
+ default:
50
+ orderStatus = `ttk_${status}`
51
+ }
52
+
53
+ var orderUpdatedAt = new Date(update_time * 1000)
54
+ var orderCreatedAt = new Date(Number(create_time))
55
+ var slaExpiresAt = new Date(rts_sla * 1000)
56
+ let docRefNo = orderNo
57
+ let isSOF: boolean = false
58
+ if (deliveryOption == 'SEND_BY_SELLER') isSOF = true
59
+
60
+ let orderItems = itemList.map(item => {
61
+ var { product_id: name, sku_id, quantity: qty, sku_original_price, sku_sale_price } = item
62
+
63
+ return {
64
+ name,
65
+ variationId: sku_id,
66
+ qty,
67
+ paidPrice: sku_sale_price,
68
+ orderNo,
69
+ docRefNo,
70
+ total: sku_sale_price,
71
+ totalTax: 0,
72
+ subtotal: sku_original_price,
73
+ subtotalTax: 0,
74
+ slaExpiresAt
75
+ }
76
+ })
77
+
78
+ const { full_address, phone, zipcode, city, region: country, name: firstName } = recipientAddress
79
+
80
+ let billing = {
81
+ address_1: full_address,
82
+ address_2: null,
83
+ address_3: null,
84
+ address_4: null,
85
+ address_5: null,
86
+ phone,
87
+ phone_2: null,
88
+ postcode: zipcode,
89
+ city,
90
+ country,
91
+ first_name: firstName,
92
+ last_name: null
93
+ }
94
+
95
+ let shipping = {
96
+ address_1: full_address,
97
+ address_2: null,
98
+ address_3: null,
99
+ address_4: null,
100
+ address_5: null,
101
+ phone,
102
+ phone_2: null,
103
+ postcode: zipcode,
104
+ city,
105
+ country,
106
+ first_name: firstName,
107
+ last_name: null
108
+ }
109
+
110
+ let orderShipping = {
111
+ address1: shipping.address_1,
112
+ address2: null,
113
+ address3: null,
114
+ address4: null,
115
+ address5: null,
116
+ phone1: shipping.phone,
117
+ phone2: null,
118
+ postCode: shipping.postcode,
119
+ city: shipping.city,
120
+ country: shipping.country,
121
+ collectionCurrency: paymentInfo.currency,
122
+ attentionTo: shipping.first_name
123
+ }
124
+
125
+ let result: any = {
126
+ name,
127
+ orderNo,
128
+ status: orderStatus,
129
+ orderCreatedAt,
130
+ orderUpdatedAt,
131
+ totalAmount: paymentInfo.total_amount,
132
+ itemCount: itemList.length,
133
+ orderItems,
134
+ orderShipping,
135
+ billing,
136
+ shipping,
137
+ firstName,
138
+ lastName: null,
139
+ isSOF
140
+ }
141
+
142
+ let orderPackage: any = {}
143
+ if (packageList && packageList[0]?.package_id) {
144
+ let orderPackageDetail: any = await StoreAPI.getStoreOrderPackage(store, {
145
+ packageId: packageList[0].package_id
146
+ })
147
+
148
+ orderPackage = {
149
+ ...orderPackageDetail,
150
+ orderId: name
151
+ }
152
+
153
+ if (documentStatuses.indexOf(status) >= 0) {
154
+ let orderDocument: any = await StoreAPI.getStoreOrderDocument(store, {
155
+ packageId: packageList[0].package_id,
156
+ documentType: 1
157
+ })
158
+
159
+ orderPackage.orderDocument = orderDocument || []
160
+ }
161
+
162
+ result.orderPackage = orderPackage
163
+ }
164
+
165
+ results.push(result)
166
+ }
167
+
168
+ return results
169
+ }
170
+ }
171
+ }
@@ -0,0 +1,53 @@
1
+ /* https://bytedance.feishu.cn/wiki/wikcntMLczW460imZUfYqaa1Dng#jIY8hJ */
2
+
3
+ import { StoreAPI } from '../../store-api'
4
+
5
+ export function getStoreOrders() {
6
+ return {
7
+ method: 'post',
8
+ path: '/api/orders/search',
9
+ denormalize(req) {
10
+ var { pagination, fromDate, toDate, nextCursor } = req || {}
11
+ var { page, limit } = pagination || { page: 0, limit: 100 }
12
+
13
+ var create_time_from = Math.floor(new Date(fromDate).getTime() / 1000)
14
+ var create_time_to = Math.floor(new Date(toDate).getTime() / 1000)
15
+
16
+ var payload: any = {
17
+ page_size: limit,
18
+ create_time_from,
19
+ create_time_to
20
+ }
21
+
22
+ if (nextCursor) payload.cursor = nextCursor
23
+
24
+ return { payload }
25
+ },
26
+ async normalize(res, { store }) {
27
+ const { data } = res
28
+
29
+ var more: boolean = data?.more || false
30
+ var nextCursor: string = more ? data.next_cursor : null
31
+ const orderList: any[] = data?.order_list || []
32
+
33
+ let results: any[] = []
34
+ let orderIds: any = []
35
+ for (let i = 0; i < orderList.length; i++) {
36
+ const order: any = orderList[i]
37
+ orderIds.push({ ...order })
38
+
39
+ if (orderIds.length <= 20) {
40
+ const orderIdList: any = orderIds.map(orderId => orderId.order_id)
41
+ const orderDetails: any[] = await StoreAPI.getStoreOrder(store, { orderId: orderIdList })
42
+ orderDetails.map(orderDetail => {
43
+ results.push({ ...orderDetail })
44
+ })
45
+
46
+ orderIds = []
47
+ }
48
+ }
49
+
50
+ return { results, more, nextCursor }
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,29 @@
1
+ /* https://bytedance.feishu.cn/docs/doccnDyz5Bbk26iOdejbBRBlLrb#WBz4V0 */
2
+
3
+ export function getStoreProductAttributes() {
4
+ return {
5
+ method: 'get',
6
+ path: '/api/products/attributes',
7
+ denormalize(req) {
8
+ const { categoryId } = req
9
+ return { payload: { category_id: categoryId } }
10
+ },
11
+ normalize(res) {
12
+ const { data } = res
13
+
14
+ let results: any = []
15
+ data.attributes.map(item => {
16
+ let result: any = {
17
+ id: item.id,
18
+ name: item.local_display_name,
19
+ attributeType: item.attribute_type,
20
+ parent: !item.is_leaf ? 0 : item.parent_id
21
+ }
22
+
23
+ results.push(result)
24
+ })
25
+
26
+ return results
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,27 @@
1
+ /* https://bytedance.feishu.cn/docs/doccnDyz5Bbk26iOdejbBRBlLrb#jIY8hJ */
2
+
3
+ export function getStoreProductCategories() {
4
+ return {
5
+ method: 'get',
6
+ path: '/api/products/categories',
7
+ denormalize(req) {
8
+ return { payload: {} }
9
+ },
10
+ normalize(res) {
11
+ const { data } = res
12
+
13
+ let results: any = []
14
+ data.category_list.map(item => {
15
+ let result: any = {
16
+ id: item.id,
17
+ name: item.local_display_name,
18
+ parent: item.is_leaf ? item.parent_id : 0
19
+ }
20
+
21
+ results.push(result)
22
+ })
23
+
24
+ return { results, total: 1 }
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,95 @@
1
+ /* https://bytedance.feishu.cn/docs/doccnDyz5Bbk26iOdejbBRBlLrb#ytBXoS */
2
+
3
+ /* status: 0-all, 1-draft, 2-pending, 3-failed, 4-live, 5-seller_deactivated,
4
+ 6-platform-deactivated, 7-freeze, 8-deleted
5
+ */
6
+
7
+ export function getStoreProduct() {
8
+ return {
9
+ method: 'get',
10
+ path: '/api/products/details',
11
+ denormalize(req) {
12
+ var { productId } = req || {}
13
+
14
+ return { payload: { product_id: productId } }
15
+ },
16
+ async normalize(res) {
17
+ const { data } = res
18
+
19
+ const productVariations: any[] = data.skus
20
+
21
+ let variants: any[] = []
22
+ if (productVariations && productVariations?.length > 0) {
23
+ variants = productVariations.map(variant => {
24
+ let totalProductQty: number = 0
25
+ let stockInfos = variant.stock_infos
26
+ stockInfos.map(stockInfo => {
27
+ totalProductQty += stockInfo.available_stock
28
+ })
29
+
30
+ return {
31
+ variationId: variant.id,
32
+ variationSku: variant.seller_sku || variant.id.toString(),
33
+ channelSku: variant.seller_sku || variant.id.toString(),
34
+ name: data.product_name,
35
+ qty: totalProductQty,
36
+ primaryUnit: 'N/A',
37
+ primaryUnitValue: data.package_weight === '' ? null : parseFloat(data.package_weight),
38
+ costPrice: variant.price.original_price === '' ? null : parseFloat(variant.price.original_price),
39
+ sellPrice: variant.price.original_price === '' ? null : parseFloat(variant.price.original_price),
40
+ isEnabled: data.product_status == 4 ? true : false,
41
+ length: data?.package_length ? data.package_length * 10 : 1,
42
+ width: data?.package_width ? data.package_width * 10 : 1,
43
+ height: data?.package_height ? data.package_height * 10 : 1,
44
+ weight: data.package_weight === '' ? null : parseFloat(data.package_weight)
45
+ }
46
+ })
47
+ } else {
48
+ variants = [
49
+ {
50
+ variationId: data.product_id,
51
+ variationSku: data.product_name,
52
+ channelSku: data.product_name,
53
+ name: data.product_name,
54
+ qty: 0,
55
+ primaryUnit: 'N/A',
56
+ primaryUnitValue: data.package_weight === '' ? null : parseFloat(data.package_weight),
57
+ costPrice: null,
58
+ sellPrice: null,
59
+ isEnabled: data.product_status == 4 ? true : false,
60
+ length: data?.package_length ? data.package_length * 10 : 1,
61
+ width: data?.package_width ? data.package_width * 10 : 1,
62
+ height: data?.package_height ? data.package_height * 10 : 1,
63
+ weight: data.package_weight === '' ? null : parseFloat(data.package_weight)
64
+ }
65
+ ]
66
+ }
67
+
68
+ const result = {
69
+ itemId: data.product_id,
70
+ name: data.product_name,
71
+ brand: data?.brand?.name || null,
72
+ isVerified: data.product_status == 4 ? true : false,
73
+ categoryId: data?.category_list?.length > 0 ? data.category_list[0].id : '',
74
+ images: getImageUrl(data.images),
75
+ variations: variants
76
+ }
77
+
78
+ return result
79
+ }
80
+ }
81
+ }
82
+
83
+ function getImageUrl(images) {
84
+ let imageSrc: any = []
85
+
86
+ if (images) {
87
+ images.map(image => {
88
+ image.url_list.map(url => {
89
+ imageSrc.push(url)
90
+ })
91
+ })
92
+ }
93
+
94
+ return imageSrc
95
+ }
@@ -0,0 +1,38 @@
1
+ /* https://bytedance.feishu.cn/docs/doccnDyz5Bbk26iOdejbBRBlLrb#ytBXoS */
2
+
3
+ /* status: 0-all, 1-draft, 2-pending, 3-failed, 4-live, 5-seller_deactivated,
4
+ 6-platform-deactivated, 7-freeze, 8-deleted
5
+ */
6
+
7
+ import { StoreAPI } from '../../store-api'
8
+
9
+ export function getStoreProducts() {
10
+ return {
11
+ method: 'post',
12
+ path: '/api/products/search',
13
+ denormalize(req) {
14
+ var { pagination } = req || {}
15
+ var { page, limit } = pagination || { page: 0, limit: 100 }
16
+
17
+ return {
18
+ payload: { page_size: limit, page_number: page + 1, search_status: 0 },
19
+ resource: {}
20
+ }
21
+ },
22
+ async normalize(res, { store }) {
23
+ const { data } = res
24
+
25
+ const products: any[] = data?.products || []
26
+ const total: number = data?.total || 0
27
+
28
+ let results: any[] = []
29
+ for (let i = 0; i < products.length; i++) {
30
+ const product: any = products[i]
31
+ const productDetails = await StoreAPI.getStoreProduct(store, { productId: product.id })
32
+ results.push({ ...productDetails })
33
+ }
34
+
35
+ return { results, total }
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,13 @@
1
+ export * from './echo'
2
+ export * from './get-store-order'
3
+ export * from './get-store-orders'
4
+ export * from './get-store-order-document'
5
+ export * from './get-store-order-packages'
6
+ export * from './get-store-order-package'
7
+ export * from './get-store-product-attributes'
8
+ export * from './get-store-product-categories'
9
+ export * from './get-store-product'
10
+ export * from './get-store-products'
11
+ export * from './update-store-product-variation-stock'
12
+ export * from './update-store-product-variation-price'
13
+ export * from './update-order-status'
@@ -0,0 +1,24 @@
1
+ export function updateOrderStatus() {
2
+ return {
3
+ path: '/api/order/rts',
4
+ method: 'post',
5
+ async denormalize(req, { store }) {
6
+ let { orderId, status } = req
7
+
8
+ if (status == 'READY_TO_SHIP') {
9
+ return {
10
+ payload: {
11
+ order_id: orderId
12
+ }
13
+ }
14
+ } else {
15
+ return { payload: {}, requiredAPICall: false }
16
+ }
17
+ },
18
+ normalize(res) {
19
+ let result = { ...res, requiredDocument: true }
20
+
21
+ return result
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,24 @@
1
+ export function updateStoreProductVariationPrice() {
2
+ return {
3
+ path: '/api/products/prices',
4
+ method: 'put',
5
+ denormalize(req) {
6
+ const { variationId, sellPrice, productId } = (Array.isArray(req) ? req[0] : req) || {}
7
+
8
+ return {
9
+ payload: {
10
+ product_id: productId,
11
+ skus: [
12
+ {
13
+ id: variationId,
14
+ original_price: sellPrice.toString()
15
+ }
16
+ ]
17
+ }
18
+ }
19
+ },
20
+ normalize(res) {
21
+ return res
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,28 @@
1
+ export function updateStoreProductVariationStock() {
2
+ return {
3
+ method: 'put',
4
+ path: '/api/products/stocks',
5
+ denormalize(req) {
6
+ const { variationId, qty, itemId } = (Array.isArray(req) ? req[0] : req) || {}
7
+
8
+ return {
9
+ payload: {
10
+ product_id: itemId,
11
+ skus: [
12
+ {
13
+ id: variationId,
14
+ stock_infos: [
15
+ {
16
+ available_stock: qty
17
+ }
18
+ ]
19
+ }
20
+ ]
21
+ }
22
+ }
23
+ },
24
+ normalize(res) {
25
+ return res
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,2 @@
1
+ export * from './types'
2
+ export * from './tiktok'
@@ -0,0 +1,78 @@
1
+ import crypto from 'crypto'
2
+ import { Parameter, PublicRequestParameters } from './types'
3
+
4
+ /**
5
+ * { key: value } => 'keyvalue'
6
+ * @param {Object} parameters
7
+ * @return {string} concatString
8
+ */
9
+ const concatObjectKeyValue = (parameters: Parameter): string => {
10
+ if (!parameters) return ''
11
+ return Object.entries(parameters)
12
+ .sort(([k1, v1], [k2, v2]) => (k2 > k1 ? -1 : 1))
13
+ .map(([k, v]) => `${k}${v}`)
14
+ .join('')
15
+ }
16
+
17
+ /**
18
+ * Calculate a signature hash
19
+ * @param {string} appSecret
20
+ * @param {string} apiPath e.g. /order/get
21
+ * @param {Object} params
22
+ * @return {string} signature hash
23
+ */
24
+ export const signRequest = (appSecret: string, apiPath: string, params: Parameter): string => {
25
+ const hash = crypto
26
+ .createHmac('sha256', appSecret)
27
+ .update(appSecret + apiPath + concatObjectKeyValue(params) + appSecret)
28
+ .digest('hex')
29
+
30
+ return hash
31
+ }
32
+
33
+ /**
34
+ * Gather system and business parameters to compute signature
35
+ * @param {string} appKey
36
+ * @param {string} appSecret
37
+ * @param {string} apiPath
38
+ * @param {string?} accessToken
39
+ * @param {Parameter?} payload
40
+ * @return {SystemParameters}
41
+ */
42
+ export function makePublicRequestParameters(
43
+ appKey: string,
44
+ appSecret: string,
45
+ apiPath: string,
46
+ accessToken: string,
47
+ shopId: string,
48
+ payload?: Parameter
49
+ ): PublicRequestParameters {
50
+ const ts = Math.floor(new Date(new Date().toUTCString()).getTime() / 1000).toString()
51
+
52
+ const publicRequestParams: {
53
+ app_key: string
54
+ timestamp: string
55
+ access_token: string
56
+ shop_id?: string
57
+ } = {
58
+ app_key: appKey,
59
+ timestamp: ts,
60
+ access_token: accessToken
61
+ }
62
+
63
+ let signatureParams: any = {
64
+ app_key: publicRequestParams.app_key,
65
+ timestamp: publicRequestParams.timestamp
66
+ }
67
+
68
+ if (shopId) {
69
+ publicRequestParams.shop_id = shopId
70
+
71
+ signatureParams.shop_id = shopId
72
+ }
73
+
74
+ return {
75
+ ...publicRequestParams,
76
+ sign: signRequest(appSecret, apiPath, { ...payload, ...signatureParams })
77
+ }
78
+ }