@things-factory/integration-sellercraft 5.0.14 → 6.0.0-alpha.3

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 (38) hide show
  1. package/dist-server/controllers/sellercraft/sellercraft.js +6 -6
  2. package/dist-server/controllers/sellercraft/sellercraft.js.map +1 -1
  3. package/dist-server/controllers/sellercraft-api/decorators.js +12 -6
  4. package/dist-server/controllers/sellercraft-api/decorators.js.map +1 -1
  5. package/dist-server/controllers/sellercraft-api/index.js +2 -2
  6. package/dist-server/controllers/sellercraft-api/index.js.map +1 -1
  7. package/dist-server/controllers/sellercraft-channel-integration/apis/ingest-channel-order.js +5 -3
  8. package/dist-server/controllers/sellercraft-channel-integration/apis/ingest-channel-order.js.map +1 -1
  9. package/dist-server/controllers/sellercraft-channel-integration-api/index.js +2 -2
  10. package/dist-server/controllers/sellercraft-channel-integration-api/index.js.map +1 -1
  11. package/dist-server/routers/sellercraft-router.js +29 -3
  12. package/dist-server/routers/sellercraft-router.js.map +1 -1
  13. package/dist-server/service/marketplace-channel/marketplace-channel-order-mutation.js +294 -258
  14. package/dist-server/service/marketplace-channel/marketplace-channel-order-mutation.js.map +1 -1
  15. package/dist-server/service/marketplace-channel/marketplace-channel-product-mutation.js +59 -16
  16. package/dist-server/service/marketplace-channel/marketplace-channel-product-mutation.js.map +1 -1
  17. package/dist-server/service/marketplace-channel/marketplace-channel.js +8 -4
  18. package/dist-server/service/marketplace-channel/marketplace-channel.js.map +1 -1
  19. package/dist-server/service/sellercraft/sellercraft-mutation.js +6 -4
  20. package/dist-server/service/sellercraft/sellercraft-mutation.js.map +1 -1
  21. package/dist-server/service/sellercraft/sellercraft-query.js +6 -8
  22. package/dist-server/service/sellercraft/sellercraft-query.js.map +1 -1
  23. package/dist-server/service/sellercraft/sellercraft.js +8 -4
  24. package/dist-server/service/sellercraft/sellercraft.js.map +1 -1
  25. package/dist-server/tsconfig.tsbuildinfo +1 -1
  26. package/package.json +16 -16
  27. package/server/controllers/sellercraft/sellercraft.ts +6 -6
  28. package/server/controllers/sellercraft-api/decorators.ts +11 -6
  29. package/server/controllers/sellercraft-api/index.ts +1 -1
  30. package/server/controllers/sellercraft-channel-integration/apis/ingest-channel-order.ts +5 -3
  31. package/server/controllers/sellercraft-channel-integration-api/index.ts +1 -1
  32. package/server/routers/sellercraft-router.ts +45 -4
  33. package/server/service/marketplace-channel/marketplace-channel-order-mutation.ts +348 -310
  34. package/server/service/marketplace-channel/marketplace-channel-product-mutation.ts +78 -17
  35. package/server/service/marketplace-channel/marketplace-channel.ts +4 -0
  36. package/server/service/sellercraft/sellercraft-mutation.ts +17 -9
  37. package/server/service/sellercraft/sellercraft-query.ts +7 -8
  38. package/server/service/sellercraft/sellercraft.ts +5 -1
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@things-factory/integration-sellercraft",
3
- "version": "5.0.14",
3
+ "version": "6.0.0-alpha.3",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
7
7
  "license": "MIT",
8
- "author": "heartyoh",
8
+ "author": "heartyoh <heartyoh@hatiolab.com>",
9
9
  "description": "A microservice that manage integration with sellercraft ecommerce omnichannel app",
10
10
  "publishConfig": {
11
11
  "access": "public",
@@ -24,19 +24,19 @@
24
24
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
25
25
  },
26
26
  "dependencies": {
27
- "@things-factory/apptool-ui": "^5.0.14",
28
- "@things-factory/auth-ui": "^5.0.14",
29
- "@things-factory/biz-base": "^5.0.14",
30
- "@things-factory/code-ui": "^5.0.14",
31
- "@things-factory/context-ui": "^5.0.14",
32
- "@things-factory/grist-ui": "^5.0.14",
33
- "@things-factory/i18n-base": "^5.0.14",
34
- "@things-factory/integration-marketplace": "^5.0.14",
35
- "@things-factory/integration-ui": "^5.0.14",
36
- "@things-factory/more-ui": "^5.0.14",
37
- "@things-factory/resource-ui": "^5.0.14",
38
- "@things-factory/setting-ui": "^5.0.14",
39
- "@things-factory/system-ui": "^5.0.14",
27
+ "@things-factory/apptool-ui": "^6.0.0-alpha.3",
28
+ "@things-factory/auth-ui": "^6.0.0-alpha.3",
29
+ "@things-factory/biz-base": "^6.0.0-alpha.3",
30
+ "@things-factory/code-ui": "^6.0.0-alpha.3",
31
+ "@things-factory/context-ui": "^6.0.0-alpha.3",
32
+ "@things-factory/grist-ui": "^6.0.0-alpha.3",
33
+ "@things-factory/i18n-base": "^6.0.0-alpha.3",
34
+ "@things-factory/integration-marketplace": "^6.0.0-alpha.3",
35
+ "@things-factory/integration-ui": "^6.0.0-alpha.3",
36
+ "@things-factory/more-ui": "^6.0.0-alpha.3",
37
+ "@things-factory/resource-ui": "^6.0.0-alpha.3",
38
+ "@things-factory/setting-ui": "^6.0.0-alpha.3",
39
+ "@things-factory/system-ui": "^6.0.0-alpha.3",
40
40
  "debug": "^4.1.1",
41
41
  "node-fetch": "^2.6.0",
42
42
  "querystring": "^0.2.1"
@@ -51,5 +51,5 @@
51
51
  "nock": "^13.0.2",
52
52
  "should": "^13.2.3"
53
53
  },
54
- "gitHead": "9ceaa39746fcf42953e429fab2001353cd821ded"
54
+ "gitHead": "1e273b6485662da938cae8fdca035d994ef4a95d"
55
55
  }
@@ -46,8 +46,8 @@ export class Sellercraft {
46
46
  if (response.ok) {
47
47
  return await response.json()
48
48
  } else {
49
- const result = await response.json()
50
- throw new Error(`(${response.status}) ${result.message}`)
49
+ const result = await response.text()
50
+ throw new Error(`(${response.status}) ${result}`)
51
51
  }
52
52
  }
53
53
 
@@ -72,8 +72,8 @@ export class Sellercraft {
72
72
  if (response.ok) {
73
73
  return await response.json()
74
74
  } else {
75
- const result = await response.json()
76
- throw new Error(`(${response.status}) ${result.message}`)
75
+ const result = await response.text()
76
+ throw new Error(`(${response.status}) ${result}`)
77
77
  }
78
78
  }
79
79
 
@@ -102,8 +102,8 @@ export class Sellercraft {
102
102
  if (response.ok) {
103
103
  return await response.json()
104
104
  } else {
105
- const result = await response.json()
106
- throw new Error(`(${response.status}) ${result.message}`)
105
+ const result = await response.text()
106
+ throw new Error(`(${response.status}) ${result}`)
107
107
  }
108
108
  }
109
109
  }
@@ -32,15 +32,20 @@ export const api = (target: Object, property: string, descriptor: TypedPropertyD
32
32
  var denormalized = await denormalize(request || {}, { store })
33
33
  debug('request', denormalized)
34
34
 
35
- var response = await action.apply(this, [
36
- { store, method: httpMethod, path, request: denormalized, platformAction }
37
- ])
35
+ try {
36
+ var response = await action.apply(this, [
37
+ { store, method: httpMethod, path, request: denormalized, platformAction }
38
+ ])
38
39
 
39
- createPayloadLog(store.accountId, path, denormalized, response, request?.context)
40
+ createPayloadLog(store.accountId, path, denormalized, response, request?.context)
40
41
 
41
- debug('response', response)
42
+ debug('response', response)
42
43
 
43
- return await normalize(response, { store })
44
+ return await normalize(response, { store })
45
+ } catch (error) {
46
+ createPayloadLog(store.accountId, path, denormalized, error, request?.context)
47
+ throw error
48
+ }
44
49
  }
45
50
 
46
51
  return descriptor
@@ -1,4 +1,4 @@
1
- import { getRepository } from 'typeorm'
1
+ import { getRepository } from '@things-factory/shell'
2
2
 
3
3
  import { Sellercraft } from '../../service'
4
4
  import { api } from './decorators'
@@ -14,6 +14,7 @@ export function ingestChannelOrder() {
14
14
  organisation_id: order.organisationId,
15
15
  channel_shop_id: order.channelShopId,
16
16
  native_order_id: order.id.toString(),
17
+ native_order_display_id: order?.sellercraftDisplayOrderNo,
17
18
  ordered_at_date: new Date(order.createdAt).toISOString().slice(0, -5) + 'Z',
18
19
  ordered_at_time: new Date(order.createdAt).toISOString().slice(0, -5) + 'Z',
19
20
  updated_at_date: new Date(order.updatedAt).toISOString().slice(0, -5) + 'Z',
@@ -27,7 +28,7 @@ export function ingestChannelOrder() {
27
28
  amount_nett: parseFloat(charge.nettAmount) || 0
28
29
  }
29
30
  }),
30
- address_shipping: {
31
+ address_shipping: order?.shipAddress1 ? {
31
32
  first_name: order.shipFirstName,
32
33
  last_name: order.shipLastName,
33
34
  line_1: order.shipAddress1,
@@ -40,7 +41,7 @@ export function ingestChannelOrder() {
40
41
  country: order.shipCountry,
41
42
  phone_1: order.shipPhone1,
42
43
  phone_2: order.shipPhone2
43
- },
44
+ } : null,
44
45
  address_billing: {
45
46
  first_name: order.billFirstName,
46
47
  last_name: order.billLastName,
@@ -75,7 +76,8 @@ export function ingestChannelOrder() {
75
76
  order_status_value: ORDER_STATUS[`${order.status}`]
76
77
  }
77
78
  }),
78
- seller_logistics: order?.isSOF
79
+ seller_logistics: order?.isSOF,
80
+ shipping_type: order?.shipAddress1 ? 'DROP_SHIPPING' : 'SELF_PICKUP'
79
81
  }
80
82
  })
81
83
 
@@ -1,4 +1,4 @@
1
- import { getRepository } from 'typeorm'
1
+ import { getRepository } from '@things-factory/shell'
2
2
 
3
3
  import { Sellercraft } from '../../service'
4
4
  import { api } from './decorators'
@@ -1,11 +1,12 @@
1
1
  import Router from 'koa-router'
2
2
  import { v4 as uuidv4 } from 'uuid'
3
3
 
4
- import { config } from '@things-factory/env'
5
4
  import { StoreAPI } from '@things-factory/integration-marketplace'
6
- import { getShop } from '../utils/tokencraft-util'
5
+ import { createPayloadLog, PayloadType } from '@things-factory/integration-base'
6
+ import { sleep } from '@things-factory/utils'
7
7
 
8
8
  import { SHIPPING_TYPE } from '../constants'
9
+ import { getShop } from '../utils/tokencraft-util'
9
10
 
10
11
  const debug = require('debug')('things-factory:integration-sellercraft:sellercraft-router')
11
12
 
@@ -106,6 +107,12 @@ sellercraftRouter.post('/sellercraft/store/update-order-status', async (context,
106
107
  const requestBody = context.request.body
107
108
  var result: any = {}
108
109
  let mappedStore: any = await getShop(context, requestBody.channel_id, requestBody.shop_id)
110
+ let packageIds: any =
111
+ mappedStore.platform == 'tiktok'
112
+ ? requestBody?.order_items.map(oi => {
113
+ return oi.package_id
114
+ })
115
+ : []
109
116
 
110
117
  const reqBody = {
111
118
  orderId: requestBody.native_order_id,
@@ -118,6 +125,7 @@ sellercraftRouter.post('/sellercraft/store/update-order-status', async (context,
118
125
  }) || []
119
126
  ),
120
127
  isSOF: requestBody?.seller_logistics,
128
+ packageIds: [...new Set(packageIds)] || [],
121
129
  locations:
122
130
  mappedStore.platform == 'shopify'
123
131
  ? requestBody?.order_items.map(oi => {
@@ -131,7 +139,14 @@ sellercraftRouter.post('/sellercraft/store/update-order-status', async (context,
131
139
  let responseBody: any = { operation_id: uuidv4() }
132
140
  try {
133
141
  try {
134
- result = (await StoreAPI.updateOrderStatus(mappedStore, reqBody)) || {}
142
+ if (mappedStore.platform == 'tiktok') {
143
+ for (let packageId of reqBody.packageIds) {
144
+ result = (await StoreAPI.updateOrderStatus(mappedStore, { packageId, status: reqBody.status })) || {}
145
+ }
146
+ } else {
147
+ result = (await StoreAPI.updateOrderStatus(mappedStore, reqBody)) || {}
148
+ }
149
+
135
150
  debug(result)
136
151
  } catch (e) {
137
152
  if (e?.requiredDocument) result.requiredDocument = e.requiredDocument
@@ -147,12 +162,15 @@ sellercraftRouter.post('/sellercraft/store/update-order-status', async (context,
147
162
  let orderDocument: any = orderPackage.orderDocument
148
163
  if (orderDocument?.length == 0) {
149
164
  let hasDocument: boolean = false
150
- while (!hasDocument) {
165
+ let retries = 0
166
+ while (!hasDocument && retries < 10) {
151
167
  orderDocument = await StoreAPI.getStoreOrderDocument(mappedStore, { packageId, documentType: 1 })
152
168
  if (orderDocument?.length > 0) {
153
169
  hasDocument = true
154
170
  break
155
171
  }
172
+ await sleep(1000)
173
+ retries++
156
174
  }
157
175
  }
158
176
 
@@ -196,6 +214,18 @@ sellercraftRouter.post('/sellercraft/store/update-order-status', async (context,
196
214
 
197
215
  responseBody.time = Math.floor(new Date(new Date().toUTCString()).getTime() / 1000)
198
216
 
217
+ try {
218
+ createPayloadLog(
219
+ mappedStore.channelShopId,
220
+ '/sellercraft/store/update-order-status',
221
+ requestBody,
222
+ responseBody,
223
+ null,
224
+ PayloadType.INGESTION,
225
+ 'hub-api'
226
+ )
227
+ } catch (e) {}
228
+
199
229
  context.type = 'application/json'
200
230
  context.status = 200
201
231
  context.body = responseBody
@@ -208,6 +238,17 @@ sellercraftRouter.post('/sellercraft/store/update-order-status', async (context,
208
238
  context.type = 'application/json'
209
239
  context.status = 500
210
240
  context.body = responseBody
241
+ try {
242
+ createPayloadLog(
243
+ mappedStore?.channelShopId,
244
+ '/sellercraft/store/update-order-status',
245
+ requestBody,
246
+ responseBody,
247
+ null,
248
+ PayloadType.INGESTION,
249
+ 'hub-api'
250
+ )
251
+ } catch (e) {}
211
252
  }
212
253
  } catch (e) {}
213
254
  })