@nuskin/ns-product-lib 2.2.0-cx24-2467.1 → 2.2.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
@@ -1,9 +1,10 @@
1
- # [2.2.0-cx24-2467.1](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.1.0...v2.2.0-cx24-2467.1) (2022-10-11)
1
+ # [2.2.0](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.1.0...v2.2.0) (2022-10-13)
2
2
 
3
3
 
4
- ### New
4
+ ### Update
5
5
 
6
- * add variants (#CX24-2467) ([04b0632](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/commit/04b0632d3f10758852f815cf2d06dd1f04aa7188)), closes [#CX24-2467](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/issues/CX24-2467)
6
+ * Get Kong URL from contentstack (CX24-2447) ([272b35a](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/commit/272b35a63908267e3c004ef43cbc2ecf0452a907))
7
+ * redirect to equinox sign-in if the market is equinox-enabled (CX24-2092) ([ffff6e2](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/commit/ffff6e21c0c6e72e0e3e42583dd443d7a0227bea))
7
8
 
8
9
  # [2.1.0](https://code.tls.nuskin.io/ns-am/product/js-libs/ns-product-lib/compare/v2.0.1...v2.1.0) (2022-10-04)
9
10
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuskin/ns-product-lib",
3
- "version": "2.2.0-cx24-2467.1",
3
+ "version": "2.2.0",
4
4
  "description": "This project contains shared Product models and code between the backend and frontend.",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -29,7 +29,7 @@
29
29
  "prettier": "1.19.1"
30
30
  },
31
31
  "dependencies": {
32
- "@nuskin/ns-common-lib": "1.3.0",
32
+ "@nuskin/ns-common-lib": "1.4.5",
33
33
  "@nuskin/ns-util": "3.107.0",
34
34
  "axios": "0.27.2",
35
35
  "qs": "6.11.0"
@@ -14,11 +14,12 @@ const headers = {
14
14
  const http = axios.create({ baseURL, headers });
15
15
 
16
16
  // in-memory caching
17
- const cacheKeys = { aemConfig: 'aemConfig', equinoxMarkets: 'equinoxMarkets' };
17
+ const cacheKeys = { aemConfig: 'aemConfig', equinoxMarkets: 'equinoxMarkets', kongUrl: 'kongUrl' };
18
18
  const cacheTTLInSeconds = 30 * 1000;
19
19
  const cache = {
20
20
  [cacheKeys.aemConfig]: { data: null, ttl: Date.now() + cacheTTLInSeconds },
21
- [cacheKeys.equinoxMarkets]: { data: null, ttl: Date.now() + cacheTTLInSeconds }
21
+ [cacheKeys.equinoxMarkets]: { data: null, ttl: Date.now() + cacheTTLInSeconds },
22
+ [cacheKeys.kongUrl]: { data: null, ttl: Date.now() + cacheTTLInSeconds}
22
23
  };
23
24
 
24
25
  /**
@@ -139,6 +140,36 @@ async function getEquinoxMarkets() {
139
140
  }
140
141
  }
141
142
 
143
+ /**getKongUrl gets the URL for Kong in contentstack
144
+ *
145
+ * @returns {string}
146
+ */
147
+ async function getKongUrl() {
148
+ try {
149
+ if (isCacheExpired(cacheKeys.kongUrl)) {
150
+ const variables = { uid: 'blt5633ff9e560f14ef' };
151
+ const query = `query KongUrlByUid($uid: String!) {
152
+ equinox_markets(uid: $uid) {
153
+ kong_urls {
154
+ ${env}
155
+ }
156
+ }
157
+ }`;
158
+
159
+ const { data } = await contentstackService({
160
+ data: { variables, query }
161
+ });
162
+
163
+ setCachedData(cacheKeys.kongUrl, data.equinox_markets.kong_urls[env]);
164
+ }
165
+
166
+ return getCachedData(cacheKeys.kongUrl);
167
+ } catch (error) {
168
+ console.error(error);
169
+ return [];
170
+ }
171
+ }
172
+
142
173
  /**
143
174
  * isMarketEnabled checks is the given market is in the list
144
175
  * of equinox-enabled markets.
@@ -177,5 +208,6 @@ async function contentstackService(config) {
177
208
  module.exports = {
178
209
  getAEMConfig,
179
210
  getEquinoxMarkets,
180
- isMarketEnabled
211
+ isMarketEnabled,
212
+ getKongUrl
181
213
  }
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  const axios = require("axios");
3
3
  const contentstack = require('./contentstack/contentstack');
4
- const Product = require("./product");
4
+ const product = require("./product");
5
5
 
6
6
  /** @type {*} */
7
7
  const ProductData = {
8
8
  /**
9
- * @param {string[]} skus
10
- * @param {string} locale
11
- * @param {string} market
12
- * @param {boolean} isEquinoxEnabled
9
+ * @param {string[]} skus
10
+ * @param {string} locale
11
+ * @param {string} market
12
+ * @param {boolean} isEquinoxEnabled
13
13
  */
14
14
  getProductData: async function (skus, locale, market, isEquinoxEnabled = false) {
15
15
  const localeMarket = `${locale}_${market}`;
@@ -28,7 +28,9 @@ const ProductData = {
28
28
  getProductFromEquinox: async function (skus, locale, storeID) {
29
29
  const filter = '{"filters":[{"field":"index_key_skuId","operation":"IN","value":"' + skus.toString() + '"}]}';
30
30
  axios.defaults.withCredentials = true;
31
- const url = `https://storefront.api.wde.nuskin.io/orchestrationservices/storefront/catalogs/search/`;
31
+
32
+ const url = await contentstack.getKongUrl() + `/orchestrationservices/storefront/catalogs/search/`;
33
+ console.log("Dynamic URL", url)
32
34
  const href = `${url}?filter=${encodeURI(filter)}`;
33
35
  const response = await axios.request({
34
36
  method: 'get',
@@ -76,7 +78,7 @@ const ProductData = {
76
78
  responseType: 'json'
77
79
  });
78
80
  },
79
-
81
+
80
82
  /**
81
83
  * @param {contentstack.MarketConfig} marketConfig
82
84
  */
@@ -90,26 +92,18 @@ const ProductData = {
90
92
 
91
93
  eqProductMapper: function (productDataResponse) {
92
94
  let prod = [];
93
- const variants = [];
95
+ let count = 0;
94
96
 
95
- let prodArr = productDataResponse.map((data, count) => {
97
+ let prodArr = productDataResponse.map((data) => {
96
98
  let imageURL = data.sku[count].properties.imageURL;
97
99
  const regex = /\d+.\d+/
98
100
  let thumbnailImage = ''
99
-
101
+
100
102
  if (imageURL.includes('contentstack')) {
101
103
  thumbnailImage = imageURL + '?width=40'
102
104
  } else {
103
105
  thumbnailImage = imageURL.replace(regex,'40.40')
104
106
  }
105
-
106
- if (data.sku && data.sku.length > 1) {
107
- data.sku.map(variant => {
108
- variants.push(variant);
109
- return variant;
110
- });
111
- }
112
-
113
107
  prod = {
114
108
  "sku": data.sku[count].identifier,
115
109
  "globalProductID": data.identifier,
@@ -203,9 +197,10 @@ const ProductData = {
203
197
  "eventName": null,
204
198
  "sizeWeight": '',
205
199
  "nettoWeight": "",
206
- "variants": variants,
200
+ "variants": {
201
+ },
207
202
  "searchScore": 0,
208
- "isExclusive": false,
203
+ "isExclusive": data.sku[count].properties.isExclusive,
209
204
  "marketAttributes": {
210
205
  "discount": true,
211
206
  "redeem": true,
@@ -214,7 +209,7 @@ const ProductData = {
214
209
  "restrictedMarkets": [],
215
210
  "addOns": []
216
211
  };
217
- let newProduct = new Product(prod);
212
+ let newProduct = new product(prod);
218
213
  return newProduct
219
214
  })
220
215
 
@@ -250,20 +245,20 @@ const ProductData = {
250
245
  newStatus = 'NOT_RELEASED_FOR_SALE';
251
246
  break;
252
247
  default:
253
- newStatus = 'RELEASED_FOR_SALE'
248
+ newStatus = 'NOT_RELEASED_FOR_SALE'
254
249
  break;
255
250
  }
256
251
  return newStatus;
257
252
  },
258
253
 
259
254
  /**
260
- *
261
- * @param {*} custType
262
- *
255
+ *
256
+ * @param {*} custType
257
+ *
263
258
  */
264
259
  switchCustType: function (custType) {
265
260
  let newCustType = [];
266
- if (custType.includes('Brand Affiliate - Business Entity') || custType.includes('Brand Affiliate - Individual'))
261
+ if (custType.includes('Brand Affiliate - Business Entity') || custType.includes('Brand Affiliate - Individual'))
267
262
  newCustType.push(10)
268
263
  if (custType.includes('Retail Customer'))
269
264
  newCustType.push(20)