@smess/networking 1.2.0 → 2.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 (317) hide show
  1. package/CHANGELOG.md +221 -0
  2. package/README.md +178 -111
  3. package/dist/core/body.d.ts +10 -0
  4. package/dist/core/body.d.ts.map +1 -0
  5. package/dist/core/body.js +22 -0
  6. package/dist/core/body.js.map +1 -0
  7. package/dist/core/client.d.ts +74 -0
  8. package/dist/core/client.d.ts.map +1 -0
  9. package/dist/core/client.js +124 -0
  10. package/dist/core/client.js.map +1 -0
  11. package/dist/core/decoders.d.ts +8 -0
  12. package/dist/core/decoders.d.ts.map +1 -0
  13. package/dist/core/decoders.js +26 -0
  14. package/dist/core/decoders.js.map +1 -0
  15. package/dist/core/endpoint.d.ts +69 -0
  16. package/dist/core/endpoint.d.ts.map +1 -0
  17. package/dist/core/endpoint.js +6 -0
  18. package/dist/core/endpoint.js.map +1 -0
  19. package/dist/core/hosts.d.ts +27 -0
  20. package/dist/core/hosts.d.ts.map +1 -0
  21. package/dist/core/hosts.js +24 -0
  22. package/dist/core/hosts.js.map +1 -0
  23. package/dist/core/pagination.d.ts +33 -0
  24. package/dist/core/pagination.d.ts.map +1 -0
  25. package/dist/core/pagination.js +23 -0
  26. package/dist/core/pagination.js.map +1 -0
  27. package/dist/core/pipeline.d.ts +25 -0
  28. package/dist/core/pipeline.d.ts.map +1 -0
  29. package/dist/core/pipeline.js +12 -0
  30. package/dist/core/pipeline.js.map +1 -0
  31. package/dist/core/retry.d.ts +18 -0
  32. package/dist/core/retry.d.ts.map +1 -0
  33. package/dist/core/retry.js +47 -0
  34. package/dist/core/retry.js.map +1 -0
  35. package/dist/core/transport.d.ts +30 -0
  36. package/dist/core/transport.d.ts.map +1 -0
  37. package/dist/core/transport.js +73 -0
  38. package/dist/core/transport.js.map +1 -0
  39. package/dist/core/types.d.ts +24 -0
  40. package/dist/core/types.d.ts.map +1 -0
  41. package/dist/core/types.js +3 -0
  42. package/dist/core/types.js.map +1 -0
  43. package/dist/core/url.d.ts +15 -0
  44. package/dist/core/url.d.ts.map +1 -0
  45. package/dist/core/url.js +46 -0
  46. package/dist/core/url.js.map +1 -0
  47. package/dist/errors/parse-error-body.d.ts +20 -0
  48. package/dist/errors/parse-error-body.d.ts.map +1 -0
  49. package/dist/errors/parse-error-body.js +73 -0
  50. package/dist/errors/parse-error-body.js.map +1 -0
  51. package/dist/errors/smess-api-error.d.ts +70 -0
  52. package/dist/errors/smess-api-error.d.ts.map +1 -0
  53. package/dist/errors/smess-api-error.js +84 -0
  54. package/dist/errors/smess-api-error.js.map +1 -0
  55. package/dist/index.d.ts +27 -25
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +15 -29
  58. package/dist/index.js.map +1 -0
  59. package/dist/modules/authentication/index.d.ts +89 -0
  60. package/dist/modules/authentication/index.d.ts.map +1 -0
  61. package/dist/modules/authentication/index.js +128 -0
  62. package/dist/modules/authentication/index.js.map +1 -0
  63. package/dist/modules/campaign/index.d.ts +212 -0
  64. package/dist/modules/campaign/index.d.ts.map +1 -0
  65. package/dist/modules/campaign/index.js +193 -0
  66. package/dist/modules/campaign/index.js.map +1 -0
  67. package/dist/modules/campaign/types.d.ts +562 -0
  68. package/dist/modules/campaign/types.d.ts.map +1 -0
  69. package/dist/modules/campaign/types.js +2 -0
  70. package/dist/modules/campaign/types.js.map +1 -0
  71. package/dist/modules/danara/index.d.ts +153 -0
  72. package/dist/modules/danara/index.d.ts.map +1 -0
  73. package/dist/modules/danara/index.js +144 -0
  74. package/dist/modules/danara/index.js.map +1 -0
  75. package/dist/modules/danara/types.d.ts +479 -0
  76. package/dist/modules/danara/types.d.ts.map +1 -0
  77. package/dist/modules/danara/types.js +2 -0
  78. package/dist/modules/danara/types.js.map +1 -0
  79. package/dist/modules/messenger/index.d.ts +92 -0
  80. package/dist/modules/messenger/index.d.ts.map +1 -0
  81. package/dist/modules/messenger/index.js +44 -0
  82. package/dist/modules/messenger/index.js.map +1 -0
  83. package/dist/modules/smeup-file/index.d.ts +27 -0
  84. package/dist/modules/smeup-file/index.d.ts.map +1 -0
  85. package/dist/modules/smeup-file/index.js +17 -0
  86. package/dist/modules/smeup-file/index.js.map +1 -0
  87. package/dist/modules/sso/index.d.ts +40 -0
  88. package/dist/modules/sso/index.d.ts.map +1 -0
  89. package/dist/modules/sso/index.js +41 -0
  90. package/dist/modules/sso/index.js.map +1 -0
  91. package/dist/rx/index.d.ts +11 -0
  92. package/dist/rx/index.d.ts.map +1 -0
  93. package/dist/rx/index.js +20 -0
  94. package/dist/rx/index.js.map +1 -0
  95. package/dist/session/auth-middleware.d.ts +27 -0
  96. package/dist/session/auth-middleware.d.ts.map +1 -0
  97. package/dist/session/auth-middleware.js +122 -0
  98. package/dist/session/auth-middleware.js.map +1 -0
  99. package/dist/session/jwt.d.ts +20 -0
  100. package/dist/session/jwt.d.ts.map +1 -0
  101. package/dist/session/jwt.js +25 -0
  102. package/dist/session/jwt.js.map +1 -0
  103. package/dist/session/stores.d.ts +19 -0
  104. package/dist/session/stores.d.ts.map +1 -0
  105. package/dist/session/stores.js +103 -0
  106. package/dist/session/stores.js.map +1 -0
  107. package/dist/session/types.d.ts +28 -0
  108. package/dist/session/types.d.ts.map +1 -0
  109. package/dist/session/types.js +2 -0
  110. package/dist/session/types.js.map +1 -0
  111. package/package.json +84 -30
  112. package/dist/core/axios.d.ts +0 -51
  113. package/dist/core/axios.js +0 -65
  114. package/dist/core/axios.observable.d.ts +0 -11
  115. package/dist/core/axios.observable.js +0 -58
  116. package/dist/core/base.provider.advanced.test.d.ts +0 -1
  117. package/dist/core/base.provider.advanced.test.js +0 -29
  118. package/dist/core/base.provider.d.ts +0 -15
  119. package/dist/core/base.provider.js +0 -13
  120. package/dist/core/base.provider.test.d.ts +0 -1
  121. package/dist/core/base.provider.test.js +0 -36
  122. package/dist/core/base.service.wrapper.advanced.test.d.ts +0 -1
  123. package/dist/core/base.service.wrapper.advanced.test.js +0 -39
  124. package/dist/core/base.service.wrapper.d.ts +0 -7
  125. package/dist/core/base.service.wrapper.js +0 -11
  126. package/dist/core/base.service.wrapper.test.d.ts +0 -1
  127. package/dist/core/base.service.wrapper.test.js +0 -25
  128. package/dist/core/rx.http.service.d.ts +0 -51
  129. package/dist/core/rx.http.service.js +0 -65
  130. package/dist/services/auth.service.d.ts +0 -65
  131. package/dist/services/auth.service.js +0 -197
  132. package/dist/services/auth.service.test.d.ts +0 -1
  133. package/dist/services/auth.service.test.js +0 -334
  134. package/dist/services/cache.service.d.ts +0 -31
  135. package/dist/services/cache.service.js +0 -77
  136. package/dist/services/cache.service.test.d.ts +0 -1
  137. package/dist/services/cache.service.test.js +0 -88
  138. package/dist/services/customer.service.d.ts +0 -211
  139. package/dist/services/customer.service.js +0 -128
  140. package/dist/services/customer.service.test.d.ts +0 -1
  141. package/dist/services/customer.service.test.js +0 -430
  142. package/dist/services/employee.service.d.ts +0 -73
  143. package/dist/services/employee.service.js +0 -74
  144. package/dist/services/employee.service.test.d.ts +0 -1
  145. package/dist/services/employee.service.test.js +0 -127
  146. package/dist/services/logger.service.d.ts +0 -31
  147. package/dist/services/logger.service.js +0 -93
  148. package/dist/services/logger.service.test.d.ts +0 -1
  149. package/dist/services/logger.service.test.js +0 -31
  150. package/dist/services/order.service.d.ts +0 -73
  151. package/dist/services/order.service.js +0 -97
  152. package/dist/services/order.service.test.d.ts +0 -1
  153. package/dist/services/order.service.test.js +0 -163
  154. package/dist/services/product.service.d.ts +0 -21
  155. package/dist/services/product.service.js +0 -42
  156. package/dist/services/product.service.test.d.ts +0 -1
  157. package/dist/services/product.service.test.js +0 -61
  158. package/dist/services/smess.service.d.ts +0 -36
  159. package/dist/services/smess.service.js +0 -128
  160. package/dist/services/smess.service.test.d.ts +0 -1
  161. package/dist/services/smess.service.test.js +0 -103
  162. package/dist/services/store.cart.service.d.ts +0 -158
  163. package/dist/services/store.cart.service.js +0 -177
  164. package/dist/services/store.cart.service.test.d.ts +0 -1
  165. package/dist/services/store.cart.service.test.js +0 -394
  166. package/dist/services/store.product.service.d.ts +0 -124
  167. package/dist/services/store.product.service.js +0 -102
  168. package/dist/services/store.product.service.test.d.ts +0 -1
  169. package/dist/services/store.product.service.test.js +0 -319
  170. package/dist/services/store.service.d.ts +0 -79
  171. package/dist/services/store.service.js +0 -235
  172. package/dist/services/store.service.test.d.ts +0 -1
  173. package/dist/services/store.service.test.js +0 -274
  174. package/dist/services/storefront.cart.service.d.ts +0 -73
  175. package/dist/services/storefront.cart.service.js +0 -167
  176. package/dist/services/storefront.cart.service.test.d.ts +0 -1
  177. package/dist/services/storefront.cart.service.test.js +0 -211
  178. package/dist/services/storefront.checkout.service.d.ts +0 -62
  179. package/dist/services/storefront.checkout.service.js +0 -75
  180. package/dist/services/storefront.checkout.service.test.d.ts +0 -1
  181. package/dist/services/storefront.checkout.service.test.js +0 -158
  182. package/dist/services/storefront.customer.metadata.service.d.ts +0 -91
  183. package/dist/services/storefront.customer.metadata.service.js +0 -225
  184. package/dist/services/storefront.customer.metadata.service.test.d.ts +0 -1
  185. package/dist/services/storefront.customer.metadata.service.test.js +0 -271
  186. package/dist/services/storefront.order.service.d.ts +0 -45
  187. package/dist/services/storefront.order.service.js +0 -99
  188. package/dist/services/storefront.order.service.test.d.ts +0 -1
  189. package/dist/services/storefront.order.service.test.js +0 -158
  190. package/dist/services/storefront.product.service.d.ts +0 -52
  191. package/dist/services/storefront.product.service.js +0 -75
  192. package/dist/services/storefront.product.service.test.d.ts +0 -1
  193. package/dist/services/storefront.product.service.test.js +0 -120
  194. package/dist/services/storefront.store.service.d.ts +0 -54
  195. package/dist/services/storefront.store.service.js +0 -142
  196. package/dist/services/storefront.store.service.test.d.ts +0 -1
  197. package/dist/services/storefront.store.service.test.js +0 -90
  198. package/dist/services/user.service.d.ts +0 -16
  199. package/dist/services/user.service.js +0 -37
  200. package/dist/services/user.service.test.d.ts +0 -1
  201. package/dist/services/user.service.test.js +0 -52
  202. package/dist/services/utils/withAuthReset.d.ts +0 -3
  203. package/dist/services/utils/withAuthReset.js +0 -8
  204. package/dist/src/core/axios.d.ts +0 -51
  205. package/dist/src/core/axios.js +0 -65
  206. package/dist/src/core/axios.observable.d.ts +0 -11
  207. package/dist/src/core/axios.observable.js +0 -58
  208. package/dist/src/core/base.provider.advanced.test.d.ts +0 -1
  209. package/dist/src/core/base.provider.advanced.test.js +0 -29
  210. package/dist/src/core/base.provider.d.ts +0 -15
  211. package/dist/src/core/base.provider.js +0 -13
  212. package/dist/src/core/base.provider.test.d.ts +0 -1
  213. package/dist/src/core/base.provider.test.js +0 -36
  214. package/dist/src/core/base.service.wrapper.advanced.test.d.ts +0 -1
  215. package/dist/src/core/base.service.wrapper.advanced.test.js +0 -39
  216. package/dist/src/core/base.service.wrapper.d.ts +0 -7
  217. package/dist/src/core/base.service.wrapper.js +0 -11
  218. package/dist/src/core/base.service.wrapper.test.d.ts +0 -1
  219. package/dist/src/core/base.service.wrapper.test.js +0 -25
  220. package/dist/src/core/rx.http.service.d.ts +0 -51
  221. package/dist/src/core/rx.http.service.js +0 -65
  222. package/dist/src/index.d.ts +0 -25
  223. package/dist/src/index.js +0 -29
  224. package/dist/src/services/auth.service.d.ts +0 -65
  225. package/dist/src/services/auth.service.js +0 -197
  226. package/dist/src/services/auth.service.test.d.ts +0 -1
  227. package/dist/src/services/auth.service.test.js +0 -334
  228. package/dist/src/services/cache.service.d.ts +0 -31
  229. package/dist/src/services/cache.service.js +0 -77
  230. package/dist/src/services/cache.service.test.d.ts +0 -1
  231. package/dist/src/services/cache.service.test.js +0 -88
  232. package/dist/src/services/customer.service.d.ts +0 -199
  233. package/dist/src/services/customer.service.js +0 -114
  234. package/dist/src/services/customer.service.test.d.ts +0 -1
  235. package/dist/src/services/customer.service.test.js +0 -430
  236. package/dist/src/services/employee.service.d.ts +0 -73
  237. package/dist/src/services/employee.service.js +0 -74
  238. package/dist/src/services/employee.service.test.d.ts +0 -1
  239. package/dist/src/services/employee.service.test.js +0 -127
  240. package/dist/src/services/logger.service.d.ts +0 -31
  241. package/dist/src/services/logger.service.js +0 -93
  242. package/dist/src/services/logger.service.test.d.ts +0 -1
  243. package/dist/src/services/logger.service.test.js +0 -31
  244. package/dist/src/services/order.service.d.ts +0 -73
  245. package/dist/src/services/order.service.js +0 -97
  246. package/dist/src/services/order.service.test.d.ts +0 -1
  247. package/dist/src/services/order.service.test.js +0 -163
  248. package/dist/src/services/product.service.d.ts +0 -21
  249. package/dist/src/services/product.service.js +0 -42
  250. package/dist/src/services/product.service.test.d.ts +0 -1
  251. package/dist/src/services/product.service.test.js +0 -61
  252. package/dist/src/services/smess.service.d.ts +0 -36
  253. package/dist/src/services/smess.service.js +0 -128
  254. package/dist/src/services/smess.service.test.d.ts +0 -1
  255. package/dist/src/services/smess.service.test.js +0 -103
  256. package/dist/src/services/store.cart.service.d.ts +0 -158
  257. package/dist/src/services/store.cart.service.js +0 -177
  258. package/dist/src/services/store.cart.service.test.d.ts +0 -1
  259. package/dist/src/services/store.cart.service.test.js +0 -394
  260. package/dist/src/services/store.product.service.d.ts +0 -124
  261. package/dist/src/services/store.product.service.js +0 -102
  262. package/dist/src/services/store.product.service.test.d.ts +0 -1
  263. package/dist/src/services/store.product.service.test.js +0 -319
  264. package/dist/src/services/store.service.d.ts +0 -79
  265. package/dist/src/services/store.service.js +0 -235
  266. package/dist/src/services/store.service.test.d.ts +0 -1
  267. package/dist/src/services/store.service.test.js +0 -274
  268. package/dist/src/services/storefront.cart.service.d.ts +0 -73
  269. package/dist/src/services/storefront.cart.service.js +0 -167
  270. package/dist/src/services/storefront.cart.service.test.d.ts +0 -1
  271. package/dist/src/services/storefront.cart.service.test.js +0 -211
  272. package/dist/src/services/storefront.checkout.service.d.ts +0 -62
  273. package/dist/src/services/storefront.checkout.service.js +0 -75
  274. package/dist/src/services/storefront.checkout.service.test.d.ts +0 -1
  275. package/dist/src/services/storefront.checkout.service.test.js +0 -158
  276. package/dist/src/services/storefront.customer.metadata.service.d.ts +0 -91
  277. package/dist/src/services/storefront.customer.metadata.service.js +0 -225
  278. package/dist/src/services/storefront.customer.metadata.service.test.d.ts +0 -1
  279. package/dist/src/services/storefront.customer.metadata.service.test.js +0 -271
  280. package/dist/src/services/storefront.order.service.d.ts +0 -45
  281. package/dist/src/services/storefront.order.service.js +0 -99
  282. package/dist/src/services/storefront.order.service.test.d.ts +0 -1
  283. package/dist/src/services/storefront.order.service.test.js +0 -158
  284. package/dist/src/services/storefront.product.service.d.ts +0 -52
  285. package/dist/src/services/storefront.product.service.js +0 -75
  286. package/dist/src/services/storefront.product.service.test.d.ts +0 -1
  287. package/dist/src/services/storefront.product.service.test.js +0 -120
  288. package/dist/src/services/storefront.store.service.d.ts +0 -52
  289. package/dist/src/services/storefront.store.service.js +0 -140
  290. package/dist/src/services/storefront.store.service.test.d.ts +0 -1
  291. package/dist/src/services/storefront.store.service.test.js +0 -90
  292. package/dist/src/services/user.service.d.ts +0 -16
  293. package/dist/src/services/user.service.js +0 -37
  294. package/dist/src/services/user.service.test.d.ts +0 -1
  295. package/dist/src/services/user.service.test.js +0 -52
  296. package/dist/src/services/utils/withAuthReset.d.ts +0 -3
  297. package/dist/src/services/utils/withAuthReset.js +0 -8
  298. package/dist/src/types/types.d.ts +0 -93
  299. package/dist/src/types/types.js +0 -82
  300. package/dist/src/types/types.test.d.ts +0 -1
  301. package/dist/src/types/types.test.js +0 -25
  302. package/dist/src/utils/cache-import.d.ts +0 -3
  303. package/dist/src/utils/cache-import.js +0 -2
  304. package/dist/src/utils/networking-import.d.ts +0 -4
  305. package/dist/src/utils/networking-import.js +0 -3
  306. package/dist/src/utils/rxjs-import.d.ts +0 -5
  307. package/dist/src/utils/rxjs-import.js +0 -5
  308. package/dist/types/types.d.ts +0 -96
  309. package/dist/types/types.js +0 -82
  310. package/dist/types/types.test.d.ts +0 -1
  311. package/dist/types/types.test.js +0 -25
  312. package/dist/utils/cache-import.d.ts +0 -3
  313. package/dist/utils/cache-import.js +0 -2
  314. package/dist/utils/networking-import.d.ts +0 -4
  315. package/dist/utils/networking-import.js +0 -3
  316. package/dist/utils/rxjs-import.d.ts +0 -5
  317. package/dist/utils/rxjs-import.js +0 -5
@@ -1,235 +0,0 @@
1
- import { NetworkingUIEventWrapped, } from "../types/types";
2
- import { Accept, SMESSHeader, SmessService } from "./smess.service";
3
- import { BehaviorSubject, from, of } from "rxjs";
4
- import { map, switchMap, catchError } from "rxjs/operators";
5
- import { GenericIndexedDBService } from "./cache.service";
6
- export class StoreProvider {
7
- constructor(config, target) {
8
- this.config = config;
9
- this.target = target;
10
- }
11
- get baseURL() {
12
- return this.config.version
13
- ? `${this.config.baseUrl}/${this.config.version}`
14
- : this.config.baseUrl;
15
- }
16
- get path() {
17
- switch (this.target) {
18
- case "store-get":
19
- return "/store/${id}/information";
20
- case "store-list":
21
- return "/store/list";
22
- case "store-product-category-list":
23
- return "/store/product-category-list";
24
- case "store-product-collection":
25
- return "/store/${id}/product-collection";
26
- case "store-featured-product-list":
27
- return "/store/${id}/featured-product-list";
28
- default:
29
- return "/store/${id}";
30
- }
31
- }
32
- get method() {
33
- return "GET";
34
- }
35
- get headers() {
36
- let headers = SmessService.getHeaders(Accept.V1, null);
37
- if (this.config.clientId) {
38
- headers[SMESSHeader.ClientId] = this.config.clientId;
39
- }
40
- if (this.config.apiKey) {
41
- headers[SMESSHeader.ApiKey] = this.config.apiKey;
42
- }
43
- return SmessService.filterHeaders(headers);
44
- }
45
- getPath(...queryParams) {
46
- let definedPath = this.path;
47
- const params = definedPath.match(/\$\{(.+?)\}/g);
48
- params?.forEach((value, index) => {
49
- definedPath = definedPath.replace(value, String(queryParams[index]));
50
- });
51
- return definedPath;
52
- }
53
- }
54
- export class StoreService {
55
- constructor(config) {
56
- this.config = config;
57
- this.$selectedStoreId = new BehaviorSubject(null);
58
- // Initialize cache services for different data types
59
- this.cacheService = new GenericIndexedDBService("StoreCache", "id, timestamp", (data) => data, (data) => data);
60
- this.storeListCache = new GenericIndexedDBService("StoreListCache", "timestamp", (data) => data, (data) => data);
61
- this.productCollectionCache = new GenericIndexedDBService("ProductCollectionCache", "storeId, timestamp", (data) => data, (data) => data);
62
- this.productCategoryCache = new GenericIndexedDBService("ProductCategoryCache", "timestamp", (data) => data, (data) => data);
63
- this.featuredProductCache = new GenericIndexedDBService("FeaturedProductCache", "storeId, timestamp", (data) => data, (data) => data);
64
- }
65
- provider(target) {
66
- const targetWrapper = new StoreProvider(this.config, target);
67
- return new SmessService(targetWrapper);
68
- }
69
- /**
70
- * Set the selected store ID
71
- */
72
- setSelectedStoreId(storeId) {
73
- this.$selectedStoreId.next(storeId);
74
- }
75
- /**
76
- * Get the current selected store ID
77
- */
78
- get currentSelectedStoreId() {
79
- return this.$selectedStoreId.value;
80
- }
81
- get(id) {
82
- return from(this.cacheService.getOne(id)).pipe(switchMap((cachedData) => {
83
- if (cachedData && this.isCacheValid(cachedData.timestamp)) {
84
- // Return cached data if valid
85
- return of(NetworkingUIEventWrapped.succeeded(cachedData.data));
86
- }
87
- // Fetch from network if no cache or expired
88
- return this.provider("store-get")
89
- .request(null, undefined, id)
90
- .pipe(map((response) => {
91
- // Cache the successful response
92
- if (response.response) {
93
- this.cacheService.saveOne({
94
- id,
95
- data: response.response,
96
- timestamp: Date.now(),
97
- });
98
- }
99
- return response;
100
- }), catchError((error) => {
101
- // If network fails and we have stale cache, return it
102
- if (cachedData) {
103
- return of(NetworkingUIEventWrapped.succeeded(cachedData.data));
104
- }
105
- throw error;
106
- }));
107
- }));
108
- }
109
- list() {
110
- return from(this.storeListCache.getAll("store-list")).pipe(switchMap((cachedData) => {
111
- if (cachedData &&
112
- cachedData.length > 0 &&
113
- this.isCacheValid(cachedData[0].timestamp)) {
114
- return of(NetworkingUIEventWrapped.succeeded(cachedData[0].data));
115
- }
116
- return this.provider("store-list")
117
- .request()
118
- .pipe(map((response) => {
119
- if (response.response) {
120
- this.storeListCache.saveAll([
121
- {
122
- data: response.response,
123
- timestamp: Date.now(),
124
- },
125
- ], "store-list");
126
- }
127
- return response;
128
- }), catchError((error) => {
129
- if (cachedData && cachedData.length > 0) {
130
- return of(NetworkingUIEventWrapped.succeeded(cachedData[0].data));
131
- }
132
- throw error;
133
- }));
134
- }));
135
- }
136
- productCategoryList() {
137
- return from(this.productCategoryCache.getAll("product-category-list")).pipe(switchMap((cachedData) => {
138
- if (cachedData &&
139
- cachedData.length > 0 &&
140
- this.isCacheValid(cachedData[0].timestamp)) {
141
- return of(NetworkingUIEventWrapped.succeeded(cachedData[0].data));
142
- }
143
- return this.provider("store-product-category-list")
144
- .request()
145
- .pipe(map((response) => {
146
- if (response.response) {
147
- this.productCategoryCache.saveAll([
148
- {
149
- data: response.response,
150
- timestamp: Date.now(),
151
- },
152
- ], "product-category-list");
153
- }
154
- return response;
155
- }), catchError((error) => {
156
- if (cachedData && cachedData.length > 0) {
157
- return of(NetworkingUIEventWrapped.succeeded(cachedData[0].data));
158
- }
159
- throw error;
160
- }));
161
- }));
162
- }
163
- productCollection(id, payload) {
164
- const cacheKey = `${id}-${JSON.stringify(payload)}`;
165
- return from(this.productCollectionCache.getOne(cacheKey)).pipe(switchMap((cachedData) => {
166
- if (cachedData && this.isCacheValid(cachedData.timestamp)) {
167
- return of(NetworkingUIEventWrapped.succeeded(cachedData.data));
168
- }
169
- return this.provider("store-product-collection")
170
- .request(payload, undefined, id)
171
- .pipe(map((response) => {
172
- if (response.response) {
173
- this.productCollectionCache.saveOne({
174
- storeId: cacheKey,
175
- request: payload,
176
- data: response.response,
177
- timestamp: Date.now(),
178
- });
179
- }
180
- return response;
181
- }), catchError((error) => {
182
- if (cachedData) {
183
- return of(NetworkingUIEventWrapped.succeeded(cachedData.data));
184
- }
185
- throw error;
186
- }));
187
- }));
188
- }
189
- featuredProductList(id) {
190
- return from(this.featuredProductCache.getOne(id)).pipe(switchMap((cachedData) => {
191
- if (cachedData && this.isCacheValid(cachedData.timestamp)) {
192
- return of(NetworkingUIEventWrapped.succeeded(cachedData.data));
193
- }
194
- return this.provider("store-featured-product-list")
195
- .request(null, undefined, id)
196
- .pipe(map((response) => {
197
- if (response.response) {
198
- this.featuredProductCache.saveOne({
199
- storeId: id,
200
- data: response.response,
201
- timestamp: Date.now(),
202
- });
203
- }
204
- return response;
205
- }), catchError((error) => {
206
- if (cachedData) {
207
- return of(NetworkingUIEventWrapped.succeeded(cachedData.data));
208
- }
209
- throw error;
210
- }));
211
- }));
212
- }
213
- // Cache management methods
214
- clearCache() {
215
- return Promise.all([
216
- this.cacheService.clearAll(),
217
- this.storeListCache.clearAll(),
218
- this.productCollectionCache.clearAll(),
219
- this.productCategoryCache.clearAll(),
220
- this.featuredProductCache.clearAll(),
221
- ]).then(() => { });
222
- }
223
- clearStoreCache(id) {
224
- return this.cacheService.delete(id);
225
- }
226
- clearProductCollectionCache(id) {
227
- // This would need to be implemented with a more sophisticated approach
228
- // to clear all product collection cache entries for a specific store
229
- return Promise.resolve();
230
- }
231
- isCacheValid(timestamp) {
232
- const CACHE_DURATION = 24 * 60 * 60 * 1000; // 24 hours for testing
233
- return Date.now() - timestamp < CACHE_DURATION;
234
- }
235
- }
@@ -1 +0,0 @@
1
- import "fake-indexeddb/auto";
@@ -1,274 +0,0 @@
1
- import "fake-indexeddb/auto";
2
- import { StoreService, } from "./store.service";
3
- import { NetworkingUIEventWrapped, AlertModel, } from "../types/types";
4
- import { of } from "rxjs";
5
- describe("StoreService", () => {
6
- const config = {
7
- baseUrl: "https://api.example.com",
8
- isProd: false,
9
- clientId: "test-client-id",
10
- apiKey: "test-api-key",
11
- };
12
- let service;
13
- beforeEach(() => {
14
- service = new StoreService(config);
15
- });
16
- afterEach(async () => {
17
- await service.clearCache();
18
- });
19
- it("should create service instance", () => {
20
- expect(service).toBeDefined();
21
- });
22
- it("should get store from network when no cache", async () => {
23
- const response = { data: { id: "1", name: "Store" } };
24
- const mockProvider = {
25
- request: jest
26
- .fn()
27
- .mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
28
- };
29
- jest
30
- .spyOn(service, "provider")
31
- .mockReturnValue(mockProvider);
32
- const result = await service.get("1").toPromise();
33
- expect(result?.hasSuccess).toBe(true);
34
- expect(result?.response).toEqual(response);
35
- });
36
- it("should get store from cache when available", async () => {
37
- const response = { data: { id: "1", name: "Store" } };
38
- // First call to populate cache
39
- const mockProvider1 = {
40
- request: jest
41
- .fn()
42
- .mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
43
- };
44
- jest
45
- .spyOn(service, "provider")
46
- .mockReturnValue(mockProvider1);
47
- await service.get("1").toPromise();
48
- // Second call should use cache (even if network fails)
49
- const mockProvider2 = {
50
- request: jest
51
- .fn()
52
- .mockReturnValue(of(NetworkingUIEventWrapped.failed(AlertModel.default()))),
53
- };
54
- jest
55
- .spyOn(service, "provider")
56
- .mockReturnValue(mockProvider2);
57
- const result = await service.get("1").toPromise();
58
- expect(result?.hasSuccess).toBe(true);
59
- expect(result?.response).toEqual(response);
60
- });
61
- it("should handle network error when no cache", async () => {
62
- const mockProvider = {
63
- request: jest
64
- .fn()
65
- .mockReturnValue(of(NetworkingUIEventWrapped.failed(AlertModel.default()))),
66
- };
67
- jest
68
- .spyOn(service, "provider")
69
- .mockReturnValue(mockProvider);
70
- const result = await service.get("1").toPromise();
71
- expect(result?.hasFailed).toBe(true);
72
- expect(result?.alertModel).toBeInstanceOf(AlertModel);
73
- });
74
- it("should get store list from network when no cache", async () => {
75
- const response = { data: [{ id: "1", name: "Store" }] };
76
- const mockProvider = {
77
- request: jest
78
- .fn()
79
- .mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
80
- };
81
- jest
82
- .spyOn(service, "provider")
83
- .mockReturnValue(mockProvider);
84
- const result = await service.list().toPromise();
85
- expect(result?.hasSuccess).toBe(true);
86
- expect(result?.response).toEqual(response);
87
- });
88
- it("should get store list from cache when available", async () => {
89
- const response = { data: [{ id: "1", name: "Store" }] };
90
- // First call to populate cache
91
- const mockProvider1 = {
92
- request: jest
93
- .fn()
94
- .mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
95
- };
96
- jest
97
- .spyOn(service, "provider")
98
- .mockReturnValue(mockProvider1);
99
- await service.list().toPromise();
100
- // Second call should use cache
101
- const mockProvider2 = {
102
- request: jest
103
- .fn()
104
- .mockReturnValue(of(NetworkingUIEventWrapped.failed(AlertModel.default()))),
105
- };
106
- jest
107
- .spyOn(service, "provider")
108
- .mockReturnValue(mockProvider2);
109
- const result = await service.list().toPromise();
110
- expect(result?.hasSuccess).toBe(true);
111
- expect(result?.response).toEqual(response);
112
- });
113
- it("should get product category list from network when no cache", async () => {
114
- const response = { data: [{ id: "cat1", name: "Category" }] };
115
- const mockProvider = {
116
- request: jest
117
- .fn()
118
- .mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
119
- };
120
- jest
121
- .spyOn(service, "provider")
122
- .mockReturnValue(mockProvider);
123
- const result = await service.productCategoryList().toPromise();
124
- expect(result?.hasSuccess).toBe(true);
125
- expect(result?.response).toEqual(response);
126
- });
127
- it("should get product category list from cache when available", async () => {
128
- const response = { data: [{ id: "cat1", name: "Category" }] };
129
- // First call to populate cache
130
- const mockProvider1 = {
131
- request: jest
132
- .fn()
133
- .mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
134
- };
135
- jest
136
- .spyOn(service, "provider")
137
- .mockReturnValue(mockProvider1);
138
- await service.productCategoryList().toPromise();
139
- // Second call should use cache
140
- const mockProvider2 = {
141
- request: jest
142
- .fn()
143
- .mockReturnValue(of(NetworkingUIEventWrapped.failed(AlertModel.default()))),
144
- };
145
- jest
146
- .spyOn(service, "provider")
147
- .mockReturnValue(mockProvider2);
148
- const result = await service.productCategoryList().toPromise();
149
- expect(result?.hasSuccess).toBe(true);
150
- expect(result?.response).toEqual(response);
151
- });
152
- it("should get product collection from network when no cache", async () => {
153
- const response = { data: [{ id: "prod1", name: "Product" }] };
154
- const payload = { page: 1, per_page: 10 };
155
- const mockProvider = {
156
- request: jest
157
- .fn()
158
- .mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
159
- };
160
- jest
161
- .spyOn(service, "provider")
162
- .mockReturnValue(mockProvider);
163
- const result = await service.productCollection("1", payload).toPromise();
164
- expect(result?.hasSuccess).toBe(true);
165
- expect(result?.response).toEqual(response);
166
- });
167
- it("should get product collection from cache when available", async () => {
168
- const response = { data: [{ id: "prod1", name: "Product" }] };
169
- const payload = { page: 1, per_page: 10 };
170
- // First call to populate cache
171
- const mockProvider1 = {
172
- request: jest
173
- .fn()
174
- .mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
175
- };
176
- jest
177
- .spyOn(service, "provider")
178
- .mockReturnValue(mockProvider1);
179
- await service.productCollection("1", payload).toPromise();
180
- // Second call should use cache
181
- const mockProvider2 = {
182
- request: jest
183
- .fn()
184
- .mockReturnValue(of(NetworkingUIEventWrapped.failed(AlertModel.default()))),
185
- };
186
- jest
187
- .spyOn(service, "provider")
188
- .mockReturnValue(mockProvider2);
189
- const result = await service.productCollection("1", payload).toPromise();
190
- expect(result?.hasSuccess).toBe(true);
191
- expect(result?.response).toEqual(response);
192
- });
193
- it("should get featured product list from network when no cache", async () => {
194
- const response = {
195
- data: [{ id: "feat1", name: "Featured" }],
196
- };
197
- const mockProvider = {
198
- request: jest
199
- .fn()
200
- .mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
201
- };
202
- jest
203
- .spyOn(service, "provider")
204
- .mockReturnValue(mockProvider);
205
- const result = await service.featuredProductList("1").toPromise();
206
- expect(result?.hasSuccess).toBe(true);
207
- expect(result?.response).toEqual(response);
208
- });
209
- it("should get featured product list from cache when available", async () => {
210
- const response = {
211
- data: [{ id: "feat1", name: "Featured" }],
212
- };
213
- // First call to populate cache
214
- const mockProvider1 = {
215
- request: jest
216
- .fn()
217
- .mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
218
- };
219
- jest
220
- .spyOn(service, "provider")
221
- .mockReturnValue(mockProvider1);
222
- await service.featuredProductList("1").toPromise();
223
- // Second call should use cache
224
- const mockProvider2 = {
225
- request: jest
226
- .fn()
227
- .mockReturnValue(of(NetworkingUIEventWrapped.failed(AlertModel.default()))),
228
- };
229
- jest
230
- .spyOn(service, "provider")
231
- .mockReturnValue(mockProvider2);
232
- const result = await service.featuredProductList("1").toPromise();
233
- expect(result?.hasSuccess).toBe(true);
234
- expect(result?.response).toEqual(response);
235
- });
236
- it("should clear cache successfully", async () => {
237
- const response = { data: { id: "1", name: "Store" } };
238
- const mockProvider = {
239
- request: jest
240
- .fn()
241
- .mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
242
- };
243
- jest
244
- .spyOn(service, "provider")
245
- .mockReturnValue(mockProvider);
246
- // Populate cache
247
- await service.get("1").toPromise();
248
- // Clear cache
249
- await service.clearCache();
250
- // Should call network again after cache clear
251
- const result = await service.get("1").toPromise();
252
- expect(result?.hasSuccess).toBe(true);
253
- expect(mockProvider.request).toHaveBeenCalledTimes(2); // Once before clear, once after
254
- });
255
- it("should clear specific store cache", async () => {
256
- const response = { data: { id: "1", name: "Store" } };
257
- const mockProvider = {
258
- request: jest
259
- .fn()
260
- .mockReturnValue(of(NetworkingUIEventWrapped.succeeded(response))),
261
- };
262
- jest
263
- .spyOn(service, "provider")
264
- .mockReturnValue(mockProvider);
265
- // Populate cache for store '1'
266
- await service.get("1").toPromise();
267
- // Clear specific store cache
268
- await service.clearStoreCache("1");
269
- // Should call network again after cache clear
270
- const result = await service.get("1").toPromise();
271
- expect(result?.hasSuccess).toBe(true);
272
- expect(mockProvider.request).toHaveBeenCalledTimes(2);
273
- });
274
- });
@@ -1,73 +0,0 @@
1
- import { ProviderType, NetworkingConfig, NetworkingUIEventWrapped, HttpResponse } from "../types/types";
2
- import { SmessService } from "./smess.service";
3
- import { BehaviorSubject, Observable } from "rxjs";
4
- export type StorefrontCartTarget = "cart-add-item" | "cart-get" | "cart-update-item" | "cart-remove-item" | "cart-calculate-shipping";
5
- export type DeliveryType = "pickup" | "delivery";
6
- export interface AddToCartRequest {
7
- productId: number;
8
- quantity: number;
9
- sessionToken?: string;
10
- }
11
- export interface UpdateCartItemRequest {
12
- quantity: number;
13
- }
14
- export interface CalculateShippingRequest {
15
- postalCode: string;
16
- deliveryType: DeliveryType;
17
- }
18
- export declare class StorefrontCartProvider implements ProviderType {
19
- private readonly config;
20
- private readonly target;
21
- private readonly $sessionToken;
22
- private readonly $authToken;
23
- constructor(config: NetworkingConfig, target: StorefrontCartTarget, $sessionToken: BehaviorSubject<string | null>, $authToken: BehaviorSubject<string | null>);
24
- get baseURL(): string;
25
- get path(): string;
26
- get method(): string;
27
- get headers(): Record<string, string>;
28
- getPath(...queryParams: unknown[]): string;
29
- }
30
- export declare class StorefrontCartService {
31
- private readonly config;
32
- private readonly $authToken;
33
- readonly $sessionToken: BehaviorSubject<string | null>;
34
- constructor(config: NetworkingConfig, $authToken: BehaviorSubject<string | null>);
35
- provider(target: StorefrontCartTarget): SmessService<StorefrontCartProvider>;
36
- /**
37
- * Add item to cart
38
- * POST /storefront/cart/items
39
- */
40
- addToCart(payload: AddToCartRequest): Observable<NetworkingUIEventWrapped<HttpResponse>>;
41
- /**
42
- * Get current cart
43
- * GET /storefront/cart
44
- */
45
- getCart(): Observable<NetworkingUIEventWrapped<HttpResponse>>;
46
- /**
47
- * Update cart item quantity
48
- * PUT /storefront/cart/items/{cartItemId}
49
- */
50
- updateCartItem(cartItemId: number, payload: UpdateCartItemRequest): Observable<NetworkingUIEventWrapped<HttpResponse>>;
51
- /**
52
- * Remove cart item
53
- * DELETE /storefront/cart/items/{cartItemId}
54
- */
55
- removeCartItem(cartItemId: number): Observable<NetworkingUIEventWrapped<HttpResponse>>;
56
- /**
57
- * Calculate shipping costs
58
- * POST /storefront/cart/calculate-shipping
59
- */
60
- calculateShipping(payload: CalculateShippingRequest): Observable<NetworkingUIEventWrapped<HttpResponse>>;
61
- /**
62
- * Set the session token
63
- */
64
- setSessionToken(token: string | null): void;
65
- /**
66
- * Get the current session token
67
- */
68
- get currentSessionToken(): string | null;
69
- /**
70
- * Extract and store session token from cart responses
71
- */
72
- private extractAndStoreSessionToken;
73
- }