@unchainedshop/core 4.0.0-rc.2 → 4.0.0-rc.21

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 (472) hide show
  1. package/lib/bulk-importer/createBulkImporter.d.ts +84 -0
  2. package/lib/bulk-importer/createBulkImporter.d.ts.map +1 -0
  3. package/lib/bulk-importer/createBulkImporter.js +142 -0
  4. package/lib/bulk-importer/createBulkImporter.js.map +1 -0
  5. package/lib/bulk-importer/handlers/assortment/create.d.ts +565 -0
  6. package/lib/bulk-importer/handlers/assortment/create.d.ts.map +1 -0
  7. package/lib/bulk-importer/handlers/assortment/create.js +89 -0
  8. package/lib/bulk-importer/handlers/assortment/create.js.map +1 -0
  9. package/lib/bulk-importer/handlers/assortment/index.d.ts +4 -0
  10. package/lib/bulk-importer/handlers/assortment/index.d.ts.map +1 -0
  11. package/lib/bulk-importer/handlers/assortment/index.js +4 -0
  12. package/lib/bulk-importer/handlers/assortment/index.js.map +1 -0
  13. package/lib/bulk-importer/handlers/assortment/remove.d.ts +30 -0
  14. package/lib/bulk-importer/handlers/assortment/remove.d.ts.map +1 -0
  15. package/lib/bulk-importer/handlers/assortment/remove.js +18 -0
  16. package/lib/bulk-importer/handlers/assortment/remove.js.map +1 -0
  17. package/lib/bulk-importer/handlers/assortment/update.d.ts +566 -0
  18. package/lib/bulk-importer/handlers/assortment/update.d.ts.map +1 -0
  19. package/lib/bulk-importer/handlers/assortment/update.js +98 -0
  20. package/lib/bulk-importer/handlers/assortment/update.js.map +1 -0
  21. package/lib/bulk-importer/handlers/assortment/upsertAssortmentChildren.d.ts +29 -0
  22. package/lib/bulk-importer/handlers/assortment/upsertAssortmentChildren.d.ts.map +1 -0
  23. package/lib/bulk-importer/handlers/assortment/upsertAssortmentChildren.js +45 -0
  24. package/lib/bulk-importer/handlers/assortment/upsertAssortmentChildren.js.map +1 -0
  25. package/lib/bulk-importer/handlers/assortment/upsertAssortmentFilters.d.ts +29 -0
  26. package/lib/bulk-importer/handlers/assortment/upsertAssortmentFilters.d.ts.map +1 -0
  27. package/lib/bulk-importer/handlers/assortment/upsertAssortmentFilters.js +41 -0
  28. package/lib/bulk-importer/handlers/assortment/upsertAssortmentFilters.js.map +1 -0
  29. package/lib/bulk-importer/handlers/assortment/upsertAssortmentProducts.d.ts +29 -0
  30. package/lib/bulk-importer/handlers/assortment/upsertAssortmentProducts.d.ts.map +1 -0
  31. package/lib/bulk-importer/handlers/assortment/upsertAssortmentProducts.js +46 -0
  32. package/lib/bulk-importer/handlers/assortment/upsertAssortmentProducts.js.map +1 -0
  33. package/lib/bulk-importer/handlers/assortment/upsertMedia.d.ts +76 -0
  34. package/lib/bulk-importer/handlers/assortment/upsertMedia.d.ts.map +1 -0
  35. package/lib/bulk-importer/handlers/assortment/upsertMedia.js +53 -0
  36. package/lib/bulk-importer/handlers/assortment/upsertMedia.js.map +1 -0
  37. package/lib/bulk-importer/handlers/filter/create.d.ts +138 -0
  38. package/lib/bulk-importer/handlers/filter/create.d.ts.map +1 -0
  39. package/lib/bulk-importer/handlers/filter/create.js +80 -0
  40. package/lib/bulk-importer/handlers/filter/create.js.map +1 -0
  41. package/lib/bulk-importer/handlers/filter/index.d.ts +4 -0
  42. package/lib/bulk-importer/handlers/filter/index.d.ts.map +1 -0
  43. package/lib/bulk-importer/handlers/filter/index.js +4 -0
  44. package/lib/bulk-importer/handlers/filter/index.js.map +1 -0
  45. package/lib/bulk-importer/handlers/filter/remove.d.ts +20 -0
  46. package/lib/bulk-importer/handlers/filter/remove.d.ts.map +1 -0
  47. package/lib/bulk-importer/handlers/filter/remove.js +18 -0
  48. package/lib/bulk-importer/handlers/filter/remove.js.map +1 -0
  49. package/lib/bulk-importer/handlers/filter/update.d.ts +138 -0
  50. package/lib/bulk-importer/handlers/filter/update.d.ts.map +1 -0
  51. package/lib/bulk-importer/handlers/filter/update.js +70 -0
  52. package/lib/bulk-importer/handlers/filter/update.js.map +1 -0
  53. package/lib/bulk-importer/handlers/product/create.d.ts +1330 -0
  54. package/lib/bulk-importer/handlers/product/create.d.ts.map +1 -0
  55. package/lib/bulk-importer/handlers/product/create.js +132 -0
  56. package/lib/bulk-importer/handlers/product/create.js.map +1 -0
  57. package/lib/bulk-importer/handlers/product/index.d.ts +4 -0
  58. package/lib/bulk-importer/handlers/product/index.d.ts.map +1 -0
  59. package/lib/bulk-importer/handlers/product/index.js +4 -0
  60. package/lib/bulk-importer/handlers/product/index.js.map +1 -0
  61. package/lib/bulk-importer/handlers/product/remove.d.ts +32 -0
  62. package/lib/bulk-importer/handlers/product/remove.d.ts.map +1 -0
  63. package/lib/bulk-importer/handlers/product/remove.js +18 -0
  64. package/lib/bulk-importer/handlers/product/remove.js.map +1 -0
  65. package/lib/bulk-importer/handlers/product/transformSpecificationToProductStructure.d.ts +280 -0
  66. package/lib/bulk-importer/handlers/product/transformSpecificationToProductStructure.d.ts.map +1 -0
  67. package/lib/bulk-importer/handlers/product/transformSpecificationToProductStructure.js +77 -0
  68. package/lib/bulk-importer/handlers/product/transformSpecificationToProductStructure.js.map +1 -0
  69. package/lib/bulk-importer/handlers/product/update.d.ts +1330 -0
  70. package/lib/bulk-importer/handlers/product/update.d.ts.map +1 -0
  71. package/lib/bulk-importer/handlers/product/update.js +132 -0
  72. package/lib/bulk-importer/handlers/product/update.js.map +1 -0
  73. package/lib/bulk-importer/handlers/product/upsertMedia.d.ts +75 -0
  74. package/lib/bulk-importer/handlers/product/upsertMedia.d.ts.map +1 -0
  75. package/lib/bulk-importer/handlers/product/upsertMedia.js +59 -0
  76. package/lib/bulk-importer/handlers/product/upsertMedia.js.map +1 -0
  77. package/lib/bulk-importer/handlers/product/upsertVariations.d.ts +79 -0
  78. package/lib/bulk-importer/handlers/product/upsertVariations.d.ts.map +1 -0
  79. package/lib/bulk-importer/handlers/product/upsertVariations.js +72 -0
  80. package/lib/bulk-importer/handlers/product/upsertVariations.js.map +1 -0
  81. package/lib/bulk-importer/handlers/utils/convertTagsToLowerCase.d.ts +3 -0
  82. package/lib/bulk-importer/handlers/utils/convertTagsToLowerCase.d.ts.map +1 -0
  83. package/lib/bulk-importer/handlers/utils/convertTagsToLowerCase.js +6 -0
  84. package/lib/bulk-importer/handlers/utils/convertTagsToLowerCase.js.map +1 -0
  85. package/lib/bulk-importer/handlers/utils/event-schema.d.ts +21 -0
  86. package/lib/bulk-importer/handlers/utils/event-schema.d.ts.map +1 -0
  87. package/lib/bulk-importer/handlers/utils/event-schema.js +64 -0
  88. package/lib/bulk-importer/handlers/utils/event-schema.js.map +1 -0
  89. package/lib/bulk-importer/index.d.ts +4 -0
  90. package/lib/bulk-importer/index.d.ts.map +1 -0
  91. package/lib/bulk-importer/index.js +4 -0
  92. package/lib/bulk-importer/index.js.map +1 -0
  93. package/lib/bulk-importer/upsertAsset.d.ts +28 -0
  94. package/lib/bulk-importer/upsertAsset.d.ts.map +1 -0
  95. package/lib/bulk-importer/upsertAsset.js +41 -0
  96. package/lib/bulk-importer/upsertAsset.js.map +1 -0
  97. package/lib/core-index.d.ts +9 -6
  98. package/lib/core-index.d.ts.map +1 -1
  99. package/lib/core-index.js +5 -1
  100. package/lib/core-index.js.map +1 -1
  101. package/lib/directors/BaseDiscountAdapter.d.ts +4 -4
  102. package/lib/directors/BaseDiscountAdapter.d.ts.map +1 -1
  103. package/lib/directors/BaseDiscountAdapter.js +1 -1
  104. package/lib/directors/BaseDiscountAdapter.js.map +1 -1
  105. package/lib/directors/BaseDiscountDirector.d.ts +1 -1
  106. package/lib/directors/BaseDiscountDirector.d.ts.map +1 -1
  107. package/lib/directors/BaseDiscountDirector.js +1 -1
  108. package/lib/directors/BaseDiscountDirector.js.map +1 -1
  109. package/lib/directors/BasePricingAdapter.d.ts +2 -2
  110. package/lib/directors/BasePricingAdapter.d.ts.map +1 -1
  111. package/lib/directors/BasePricingDirector.d.ts.map +1 -1
  112. package/lib/directors/BasePricingDirector.js +3 -3
  113. package/lib/directors/BasePricingDirector.js.map +1 -1
  114. package/lib/directors/BasePricingSheet.js.map +1 -1
  115. package/lib/directors/BaseWorker.d.ts +3 -3
  116. package/lib/directors/BaseWorker.d.ts.map +1 -1
  117. package/lib/directors/BaseWorker.js +12 -12
  118. package/lib/directors/BaseWorker.js.map +1 -1
  119. package/lib/directors/DeliveryAdapter.d.ts +4 -5
  120. package/lib/directors/DeliveryAdapter.d.ts.map +1 -1
  121. package/lib/directors/DeliveryAdapter.js.map +1 -1
  122. package/lib/directors/DeliveryDirector.d.ts +3 -3
  123. package/lib/directors/DeliveryDirector.d.ts.map +1 -1
  124. package/lib/directors/DeliveryDirector.js +29 -16
  125. package/lib/directors/DeliveryDirector.js.map +1 -1
  126. package/lib/directors/DeliveryPricingAdapter.d.ts +1 -1
  127. package/lib/directors/DeliveryPricingAdapter.d.ts.map +1 -1
  128. package/lib/directors/DeliveryPricingDirector.d.ts.map +1 -1
  129. package/lib/directors/DeliveryPricingDirector.js +3 -4
  130. package/lib/directors/DeliveryPricingDirector.js.map +1 -1
  131. package/lib/directors/DeliveryPricingSheet.d.ts.map +1 -1
  132. package/lib/directors/DeliveryPricingSheet.js +2 -1
  133. package/lib/directors/DeliveryPricingSheet.js.map +1 -1
  134. package/lib/directors/EnrollmentAdapter.d.ts +7 -4
  135. package/lib/directors/EnrollmentAdapter.d.ts.map +1 -1
  136. package/lib/directors/EnrollmentAdapter.js +1 -4
  137. package/lib/directors/EnrollmentAdapter.js.map +1 -1
  138. package/lib/directors/EnrollmentDirector.d.ts +1 -1
  139. package/lib/directors/EnrollmentDirector.d.ts.map +1 -1
  140. package/lib/directors/EnrollmentDirector.js +1 -5
  141. package/lib/directors/EnrollmentDirector.js.map +1 -1
  142. package/lib/directors/EventListenerWorker.d.ts.map +1 -1
  143. package/lib/directors/EventListenerWorker.js +50 -18
  144. package/lib/directors/EventListenerWorker.js.map +1 -1
  145. package/lib/directors/FailedRescheduler.d.ts +2 -2
  146. package/lib/directors/FailedRescheduler.d.ts.map +1 -1
  147. package/lib/directors/FailedRescheduler.js +1 -1
  148. package/lib/directors/FailedRescheduler.js.map +1 -1
  149. package/lib/directors/FilterAdapter.d.ts +4 -4
  150. package/lib/directors/FilterAdapter.d.ts.map +1 -1
  151. package/lib/directors/FilterDirector.d.ts +1 -1
  152. package/lib/directors/FilterDirector.d.ts.map +1 -1
  153. package/lib/directors/FilterDirector.js +7 -8
  154. package/lib/directors/FilterDirector.js.map +1 -1
  155. package/lib/directors/IntervalWorker.d.ts.map +1 -1
  156. package/lib/directors/IntervalWorker.js +27 -9
  157. package/lib/directors/IntervalWorker.js.map +1 -1
  158. package/lib/directors/MessagingDirector.d.ts +2 -2
  159. package/lib/directors/MessagingDirector.d.ts.map +1 -1
  160. package/lib/directors/OrderDiscountAdapter.d.ts +1 -1
  161. package/lib/directors/OrderDiscountAdapter.d.ts.map +1 -1
  162. package/lib/directors/OrderDiscountAdapter.js.map +1 -1
  163. package/lib/directors/OrderPricingAdapter.d.ts +2 -2
  164. package/lib/directors/OrderPricingAdapter.d.ts.map +1 -1
  165. package/lib/directors/OrderPricingDirector.d.ts +2 -2
  166. package/lib/directors/OrderPricingDirector.d.ts.map +1 -1
  167. package/lib/directors/OrderPricingDirector.js +1 -1
  168. package/lib/directors/OrderPricingDirector.js.map +1 -1
  169. package/lib/directors/OrderPricingSheet.d.ts.map +1 -1
  170. package/lib/directors/OrderPricingSheet.js +2 -1
  171. package/lib/directors/OrderPricingSheet.js.map +1 -1
  172. package/lib/directors/PaymentAdapter.d.ts +2 -2
  173. package/lib/directors/PaymentAdapter.d.ts.map +1 -1
  174. package/lib/directors/PaymentDirector.d.ts +4 -4
  175. package/lib/directors/PaymentDirector.d.ts.map +1 -1
  176. package/lib/directors/PaymentDirector.js +24 -6
  177. package/lib/directors/PaymentDirector.js.map +1 -1
  178. package/lib/directors/PaymentPricingAdapter.d.ts +2 -2
  179. package/lib/directors/PaymentPricingAdapter.d.ts.map +1 -1
  180. package/lib/directors/PaymentPricingDirector.d.ts +1 -1
  181. package/lib/directors/PaymentPricingDirector.d.ts.map +1 -1
  182. package/lib/directors/PaymentPricingDirector.js +3 -5
  183. package/lib/directors/PaymentPricingDirector.js.map +1 -1
  184. package/lib/directors/PaymentPricingSheet.d.ts.map +1 -1
  185. package/lib/directors/PaymentPricingSheet.js +2 -1
  186. package/lib/directors/PaymentPricingSheet.js.map +1 -1
  187. package/lib/directors/ProductDiscountAdapter.d.ts +1 -1
  188. package/lib/directors/ProductDiscountAdapter.d.ts.map +1 -1
  189. package/lib/directors/ProductDiscountAdapter.js.map +1 -1
  190. package/lib/directors/ProductDiscountConfiguration.d.ts +1 -1
  191. package/lib/directors/ProductDiscountConfiguration.d.ts.map +1 -1
  192. package/lib/directors/ProductPricingAdapter.d.ts +1 -1
  193. package/lib/directors/ProductPricingAdapter.d.ts.map +1 -1
  194. package/lib/directors/ProductPricingDirector.d.ts +2 -2
  195. package/lib/directors/ProductPricingDirector.d.ts.map +1 -1
  196. package/lib/directors/ProductPricingDirector.js +3 -3
  197. package/lib/directors/ProductPricingDirector.js.map +1 -1
  198. package/lib/directors/ProductPricingSheet.d.ts +2 -2
  199. package/lib/directors/ProductPricingSheet.d.ts.map +1 -1
  200. package/lib/directors/ProductPricingSheet.js +2 -1
  201. package/lib/directors/ProductPricingSheet.js.map +1 -1
  202. package/lib/directors/QuotationAdapter.d.ts +2 -2
  203. package/lib/directors/QuotationAdapter.d.ts.map +1 -1
  204. package/lib/directors/QuotationDirector.js +2 -2
  205. package/lib/directors/WarehousingAdapter.d.ts +3 -4
  206. package/lib/directors/WarehousingAdapter.d.ts.map +1 -1
  207. package/lib/directors/WarehousingAdapter.js.map +1 -1
  208. package/lib/directors/WarehousingDirector.d.ts +5 -5
  209. package/lib/directors/WarehousingDirector.d.ts.map +1 -1
  210. package/lib/directors/WarehousingDirector.js +10 -13
  211. package/lib/directors/WarehousingDirector.js.map +1 -1
  212. package/lib/directors/WorkerAdapter.d.ts +3 -2
  213. package/lib/directors/WorkerAdapter.d.ts.map +1 -1
  214. package/lib/directors/WorkerAdapter.js +1 -1
  215. package/lib/directors/WorkerAdapter.js.map +1 -1
  216. package/lib/directors/WorkerDirector.d.ts +2 -2
  217. package/lib/directors/WorkerDirector.d.ts.map +1 -1
  218. package/lib/directors/WorkerDirector.js +2 -3
  219. package/lib/directors/WorkerDirector.js.map +1 -1
  220. package/lib/factory/index.d.ts +3 -0
  221. package/lib/factory/index.d.ts.map +1 -0
  222. package/lib/factory/index.js +3 -0
  223. package/lib/factory/index.js.map +1 -0
  224. package/lib/factory/registerProductDiscoverabilityFilter.d.ts +5 -0
  225. package/lib/factory/registerProductDiscoverabilityFilter.d.ts.map +1 -0
  226. package/lib/factory/registerProductDiscoverabilityFilter.js +27 -0
  227. package/lib/factory/registerProductDiscoverabilityFilter.js.map +1 -0
  228. package/lib/modules.d.ts +4 -5
  229. package/lib/modules.d.ts.map +1 -1
  230. package/lib/modules.js +3 -3
  231. package/lib/modules.js.map +1 -1
  232. package/lib/services/activateEnrollment.d.ts.map +1 -1
  233. package/lib/services/activateEnrollment.js +8 -12
  234. package/lib/services/activateEnrollment.js.map +1 -1
  235. package/lib/services/addMessage.d.ts +4 -0
  236. package/lib/services/addMessage.d.ts.map +1 -0
  237. package/lib/services/addMessage.js +15 -0
  238. package/lib/services/addMessage.js.map +1 -0
  239. package/lib/services/calculateDiscountTotal.js +2 -2
  240. package/lib/services/calculateDiscountTotal.js.map +1 -1
  241. package/lib/services/checkoutOrder.d.ts +1 -1
  242. package/lib/services/checkoutOrder.d.ts.map +1 -1
  243. package/lib/services/checkoutOrder.js +10 -4
  244. package/lib/services/checkoutOrder.js.map +1 -1
  245. package/lib/services/confirmOrder.d.ts +1 -1
  246. package/lib/services/confirmOrder.d.ts.map +1 -1
  247. package/lib/services/createDownloadStream.d.ts +1 -1
  248. package/lib/services/createDownloadStream.d.ts.map +1 -1
  249. package/lib/services/createDownloadStream.js +2 -0
  250. package/lib/services/createDownloadStream.js.map +1 -1
  251. package/lib/services/createEnrollmentFromCheckout.d.ts.map +1 -1
  252. package/lib/services/createEnrollmentFromCheckout.js +2 -2
  253. package/lib/services/createEnrollmentFromCheckout.js.map +1 -1
  254. package/lib/services/createManualOrderDiscount.d.ts +2 -2
  255. package/lib/services/createManualOrderDiscount.d.ts.map +1 -1
  256. package/lib/services/createSignedURL.d.ts.map +1 -1
  257. package/lib/services/createSignedURL.js +2 -0
  258. package/lib/services/createSignedURL.js.map +1 -1
  259. package/lib/services/deleteUser.d.ts +1 -1
  260. package/lib/services/deleteUser.d.ts.map +1 -1
  261. package/lib/services/deleteUser.js +4 -2
  262. package/lib/services/deleteUser.js.map +1 -1
  263. package/lib/services/discountedEntities.js.map +1 -1
  264. package/lib/services/findOrInitCart.d.ts +1 -2
  265. package/lib/services/findOrInitCart.d.ts.map +1 -1
  266. package/lib/services/findOrInitCart.js.map +1 -1
  267. package/lib/services/fullfillQuotation.d.ts +1 -1
  268. package/lib/services/fullfillQuotation.d.ts.map +1 -1
  269. package/lib/services/fullfillQuotation.js.map +1 -1
  270. package/lib/services/generateOrderFromEnrollment.d.ts +7 -0
  271. package/lib/services/generateOrderFromEnrollment.d.ts.map +1 -0
  272. package/lib/services/generateOrderFromEnrollment.js +34 -0
  273. package/lib/services/generateOrderFromEnrollment.js.map +1 -0
  274. package/lib/services/index.d.ts +6 -0
  275. package/lib/services/index.d.ts.map +1 -1
  276. package/lib/services/index.js +6 -0
  277. package/lib/services/index.js.map +1 -1
  278. package/lib/services/initCartProviders.d.ts.map +1 -1
  279. package/lib/services/initCartProviders.js +6 -2
  280. package/lib/services/initCartProviders.js.map +1 -1
  281. package/lib/services/initializeEnrollment.d.ts +1 -1
  282. package/lib/services/initializeEnrollment.d.ts.map +1 -1
  283. package/lib/services/initializeEnrollment.js +11 -12
  284. package/lib/services/initializeEnrollment.js.map +1 -1
  285. package/lib/services/linkFileService.d.ts +1 -1
  286. package/lib/services/linkFileService.d.ts.map +1 -1
  287. package/lib/services/linkFileService.js +3 -1
  288. package/lib/services/linkFileService.js.map +1 -1
  289. package/lib/services/loadFilterOptions.d.ts +2 -2
  290. package/lib/services/loadFilterOptions.d.ts.map +1 -1
  291. package/lib/services/migrateOrderCart.d.ts +1 -1
  292. package/lib/services/migrateOrderCart.d.ts.map +1 -1
  293. package/lib/services/nextUserCart.d.ts +1 -1
  294. package/lib/services/nextUserCart.d.ts.map +1 -1
  295. package/lib/services/nextUserCart.js +1 -1
  296. package/lib/services/nextUserCart.js.map +1 -1
  297. package/lib/services/processEnrollment.d.ts.map +1 -1
  298. package/lib/services/processEnrollment.js +13 -5
  299. package/lib/services/processEnrollment.js.map +1 -1
  300. package/lib/services/processOrder.d.ts.map +1 -1
  301. package/lib/services/processOrder.js +30 -30
  302. package/lib/services/processOrder.js.map +1 -1
  303. package/lib/services/processQuotation.d.ts.map +1 -1
  304. package/lib/services/processQuotation.js +10 -14
  305. package/lib/services/processQuotation.js.map +1 -1
  306. package/lib/services/proposeQuotation.d.ts +1 -1
  307. package/lib/services/proposeQuotation.d.ts.map +1 -1
  308. package/lib/services/proposeQuotation.js +2 -2
  309. package/lib/services/proposeQuotation.js.map +1 -1
  310. package/lib/services/registerPaymentCredentials.d.ts +1 -2
  311. package/lib/services/registerPaymentCredentials.d.ts.map +1 -1
  312. package/lib/services/registerPaymentCredentials.js +4 -6
  313. package/lib/services/registerPaymentCredentials.js.map +1 -1
  314. package/lib/services/rejectOrder.d.ts +1 -1
  315. package/lib/services/rejectOrder.d.ts.map +1 -1
  316. package/lib/services/rejectQuotation.d.ts +1 -1
  317. package/lib/services/rejectQuotation.d.ts.map +1 -1
  318. package/lib/services/rejectQuotation.js +2 -2
  319. package/lib/services/rejectQuotation.js.map +1 -1
  320. package/lib/services/removeFiles.js +2 -2
  321. package/lib/services/removeFiles.js.map +1 -1
  322. package/lib/services/removeProduct.d.ts.map +1 -1
  323. package/lib/services/removeProduct.js +4 -3
  324. package/lib/services/removeProduct.js.map +1 -1
  325. package/lib/services/searchAssortments.d.ts.map +1 -1
  326. package/lib/services/searchAssortments.js +3 -2
  327. package/lib/services/searchAssortments.js.map +1 -1
  328. package/lib/services/searchProducts.js +3 -3
  329. package/lib/services/searchProducts.js.map +1 -1
  330. package/lib/services/simulateProductDispatching.d.ts +1 -1
  331. package/lib/services/simulateProductDispatching.d.ts.map +1 -1
  332. package/lib/services/simulateProductInventory.d.ts +1 -1
  333. package/lib/services/simulateProductInventory.d.ts.map +1 -1
  334. package/lib/services/simulateProductInventory.js.map +1 -1
  335. package/lib/services/simulateProductPricing.d.ts +7 -4
  336. package/lib/services/simulateProductPricing.d.ts.map +1 -1
  337. package/lib/services/simulateProductPricing.js.map +1 -1
  338. package/lib/services/terminateEnrollment.d.ts.map +1 -1
  339. package/lib/services/terminateEnrollment.js +5 -9
  340. package/lib/services/terminateEnrollment.js.map +1 -1
  341. package/lib/services/updateCalculation.d.ts +2 -1
  342. package/lib/services/updateCalculation.d.ts.map +1 -1
  343. package/lib/services/updateCalculation.js +20 -12
  344. package/lib/services/updateCalculation.js.map +1 -1
  345. package/lib/services/updateScheduling.d.ts +1 -1
  346. package/lib/services/updateScheduling.d.ts.map +1 -1
  347. package/lib/services/updateScheduling.js +7 -11
  348. package/lib/services/updateScheduling.js.map +1 -1
  349. package/lib/services/updateUserAvatarAfterUpload.d.ts +1 -1
  350. package/lib/services/updateUserAvatarAfterUpload.d.ts.map +1 -1
  351. package/lib/services/updateUserAvatarAfterUpload.js.map +1 -1
  352. package/lib/services/uploadFileFromStream.d.ts +2 -2
  353. package/lib/services/uploadFileFromStream.d.ts.map +1 -1
  354. package/lib/services/uploadFileFromStream.js +6 -3
  355. package/lib/services/uploadFileFromStream.js.map +1 -1
  356. package/lib/services/uploadFileFromURL.d.ts +1 -2
  357. package/lib/services/uploadFileFromURL.d.ts.map +1 -1
  358. package/lib/services/uploadFileFromURL.js.map +1 -1
  359. package/lib/services/validateOrder.d.ts +1 -1
  360. package/lib/services/validateOrder.d.ts.map +1 -1
  361. package/lib/services/validateOrder.js +17 -24
  362. package/lib/services/validateOrder.js.map +1 -1
  363. package/lib/services/verifyQuotation.d.ts +1 -1
  364. package/lib/services/verifyQuotation.d.ts.map +1 -1
  365. package/lib/services/verifyQuotation.js +2 -2
  366. package/lib/services/verifyQuotation.js.map +1 -1
  367. package/package.json +23 -22
  368. package/src/bulk-importer/createBulkImporter.ts +205 -0
  369. package/src/bulk-importer/handlers/assortment/create.ts +118 -0
  370. package/src/bulk-importer/handlers/assortment/index.ts +3 -0
  371. package/src/bulk-importer/handlers/assortment/remove.ts +26 -0
  372. package/src/bulk-importer/handlers/assortment/update.ts +133 -0
  373. package/src/bulk-importer/handlers/assortment/upsertAssortmentChildren.ts +77 -0
  374. package/src/bulk-importer/handlers/assortment/upsertAssortmentFilters.ts +70 -0
  375. package/src/bulk-importer/handlers/assortment/upsertAssortmentProducts.ts +76 -0
  376. package/src/bulk-importer/handlers/assortment/upsertMedia.ts +76 -0
  377. package/src/bulk-importer/handlers/filter/create.ts +104 -0
  378. package/src/bulk-importer/handlers/filter/index.ts +3 -0
  379. package/src/bulk-importer/handlers/filter/remove.ts +25 -0
  380. package/src/bulk-importer/handlers/filter/update.ts +94 -0
  381. package/src/bulk-importer/handlers/product/create.ts +170 -0
  382. package/src/bulk-importer/handlers/product/index.ts +3 -0
  383. package/src/bulk-importer/handlers/product/remove.ts +27 -0
  384. package/src/bulk-importer/handlers/product/update.ts +175 -0
  385. package/src/bulk-importer/handlers/product/upsertMedia.ts +81 -0
  386. package/src/bulk-importer/handlers/product/upsertVariations.ts +110 -0
  387. package/src/bulk-importer/handlers/utils/convertTagsToLowerCase.ts +4 -0
  388. package/src/bulk-importer/index.ts +3 -0
  389. package/src/bulk-importer/upsertAsset.ts +50 -0
  390. package/src/core-index.ts +10 -7
  391. package/src/directors/BaseDiscountAdapter.test.ts +1 -1
  392. package/src/directors/BaseDiscountAdapter.ts +5 -5
  393. package/src/directors/BaseDiscountDirector.ts +2 -2
  394. package/src/directors/BasePricingAdapter.ts +2 -2
  395. package/src/directors/BasePricingDirector.ts +47 -44
  396. package/src/directors/BasePricingSheet.ts +1 -1
  397. package/src/directors/BaseWorker.ts +14 -13
  398. package/src/directors/DeliveryAdapter.ts +3 -5
  399. package/src/directors/DeliveryDirector.ts +33 -23
  400. package/src/directors/DeliveryPricingAdapter.ts +1 -1
  401. package/src/directors/DeliveryPricingDirector.ts +5 -6
  402. package/src/directors/DeliveryPricingSheet.ts +3 -2
  403. package/src/directors/EnrollmentAdapter.ts +9 -6
  404. package/src/directors/EnrollmentDirector.ts +9 -8
  405. package/src/directors/EventListenerWorker.ts +59 -19
  406. package/src/directors/FailedRescheduler.ts +2 -2
  407. package/src/directors/FilterAdapter.ts +4 -4
  408. package/src/directors/FilterDirector.ts +11 -12
  409. package/src/directors/IntervalWorker.ts +30 -9
  410. package/src/directors/MessagingDirector.ts +1 -1
  411. package/src/directors/OrderDiscountAdapter.ts +2 -2
  412. package/src/directors/OrderPricingAdapter.ts +2 -2
  413. package/src/directors/OrderPricingDirector.ts +3 -3
  414. package/src/directors/OrderPricingSheet.ts +3 -2
  415. package/src/directors/PaymentAdapter.ts +2 -2
  416. package/src/directors/PaymentDirector.ts +34 -10
  417. package/src/directors/PaymentPricingAdapter.ts +2 -2
  418. package/src/directors/PaymentPricingDirector.ts +6 -8
  419. package/src/directors/PaymentPricingSheet.ts +3 -2
  420. package/src/directors/ProductDiscountAdapter.ts +2 -2
  421. package/src/directors/ProductDiscountConfiguration.ts +1 -1
  422. package/src/directors/ProductPricingAdapter.ts +1 -1
  423. package/src/directors/ProductPricingDirector.ts +7 -7
  424. package/src/directors/ProductPricingSheet.ts +4 -3
  425. package/src/directors/QuotationAdapter.ts +2 -2
  426. package/src/directors/QuotationDirector.ts +2 -2
  427. package/src/directors/WarehousingAdapter.ts +3 -4
  428. package/src/directors/WarehousingDirector.ts +20 -23
  429. package/src/directors/WorkerAdapter.ts +9 -4
  430. package/src/directors/WorkerDirector.ts +5 -6
  431. package/src/factory/index.ts +3 -0
  432. package/src/factory/registerProductDiscoverabilityFilter.ts +36 -0
  433. package/src/modules.ts +6 -7
  434. package/src/services/activateEnrollment.ts +9 -13
  435. package/src/services/addMessage.ts +20 -0
  436. package/src/services/calculateDiscountTotal.ts +4 -4
  437. package/src/services/checkoutOrder.ts +10 -5
  438. package/src/services/createDownloadStream.ts +1 -0
  439. package/src/services/createEnrollmentFromCheckout.ts +22 -20
  440. package/src/services/createManualOrderDiscount.ts +2 -2
  441. package/src/services/createSignedURL.ts +1 -0
  442. package/src/services/deleteUser.ts +7 -2
  443. package/src/services/discountedEntities.ts +6 -6
  444. package/src/services/findOrInitCart.ts +1 -2
  445. package/src/services/fullfillQuotation.ts +1 -1
  446. package/src/services/generateOrderFromEnrollment.ts +54 -0
  447. package/src/services/index.ts +8 -0
  448. package/src/services/initCartProviders.ts +8 -10
  449. package/src/services/initializeEnrollment.ts +16 -13
  450. package/src/services/linkFileService.ts +3 -1
  451. package/src/services/nextUserCart.ts +1 -1
  452. package/src/services/processEnrollment.ts +18 -6
  453. package/src/services/processOrder.ts +37 -36
  454. package/src/services/processQuotation.ts +10 -14
  455. package/src/services/proposeQuotation.ts +2 -2
  456. package/src/services/registerPaymentCredentials.ts +6 -8
  457. package/src/services/rejectQuotation.ts +2 -2
  458. package/src/services/removeFiles.ts +2 -2
  459. package/src/services/removeProduct.ts +5 -3
  460. package/src/services/searchAssortments.ts +3 -2
  461. package/src/services/searchProducts.ts +3 -3
  462. package/src/services/simulateProductDispatching.ts +1 -1
  463. package/src/services/simulateProductInventory.ts +7 -3
  464. package/src/services/simulateProductPricing.ts +6 -3
  465. package/src/services/terminateEnrollment.ts +5 -9
  466. package/src/services/updateCalculation.ts +37 -20
  467. package/src/services/updateScheduling.ts +19 -20
  468. package/src/services/updateUserAvatarAfterUpload.ts +4 -1
  469. package/src/services/uploadFileFromStream.ts +17 -5
  470. package/src/services/uploadFileFromURL.ts +2 -2
  471. package/src/services/validateOrder.ts +34 -38
  472. package/src/services/verifyQuotation.ts +2 -2
@@ -17,9 +17,9 @@ export interface IWorker<P extends { workerId?: string }> {
17
17
  ) => {
18
18
  autorescheduleTypes: (options: { referenceDate: Date }) => Promise<(Work | null)[]>;
19
19
  process: (options: { maxWorkItemCount?: number; referenceDate?: Date }) => Promise<void>;
20
- reset: () => Promise<void>;
21
- start: () => void;
22
- stop: () => void;
20
+ reset: () => Promise<void> | void;
21
+ start: () => Promise<void> | void;
22
+ stop: () => Promise<void> | void;
23
23
  };
24
24
  }
25
25
 
@@ -42,11 +42,11 @@ export const BaseWorker: IWorker<WorkerParams> = {
42
42
 
43
43
  actions: ({ workerId }: WorkerParams, unchainedAPI) => {
44
44
  const workerActions = {
45
- start() {
45
+ async start() {
46
46
  throw new Error(`Not implemented on ${this.constructor.key}`);
47
47
  },
48
48
 
49
- stop() {
49
+ async stop() {
50
50
  throw new Error(`Not implemented on ${this.constructor.key}`);
51
51
  },
52
52
 
@@ -83,7 +83,7 @@ export const BaseWorker: IWorker<WorkerParams> = {
83
83
  retries: workConfig.retries || 0,
84
84
  };
85
85
  if (workConfig.input) {
86
- workData.input = await workConfig.input(workData);
86
+ workData.input = (await workConfig.input(workData)) || {};
87
87
  // A work input fn can skip auto scheduling a new record
88
88
  // when it explicitly returns a falsish input instead of a dictionary
89
89
  if (!workData.input) return null;
@@ -93,19 +93,20 @@ export const BaseWorker: IWorker<WorkerParams> = {
93
93
  );
94
94
  },
95
95
 
96
- process: async ({ maxWorkItemCount, referenceDate }) => {
96
+ process: async ({ maxWorkItemCount = 10, referenceDate }) => {
97
97
  await workerActions.autorescheduleTypes({
98
98
  referenceDate,
99
99
  });
100
100
 
101
- const processRecursively = async (recursionCounter = 0) => {
102
- if (maxWorkItemCount && maxWorkItemCount < recursionCounter) return null;
101
+ let processedCount = 0;
102
+ while (true) {
103
+ if (maxWorkItemCount && maxWorkItemCount <= processedCount) break;
104
+
103
105
  const doneWork = await WorkerDirector.processNextWork(unchainedAPI, workerId);
104
- if (doneWork) return processRecursively(recursionCounter + 1);
105
- return null;
106
- };
106
+ if (!doneWork) break;
107
107
 
108
- await processRecursively();
108
+ processedCount++;
109
+ }
109
110
  },
110
111
  };
111
112
 
@@ -7,7 +7,6 @@ import type { User } from '@unchainedshop/core-users';
7
7
  import {
8
8
  DeliveryConfiguration,
9
9
  DeliveryLocation,
10
- DeliveryProvider,
11
10
  DeliveryProviderType,
12
11
  } from '@unchainedshop/core-delivery';
13
12
  import { Modules } from '../modules.js';
@@ -20,18 +19,17 @@ export enum DeliveryError {
20
19
  }
21
20
 
22
21
  export interface DeliveryAdapterActions {
23
- configurationError: (transactionContext?: any) => DeliveryError;
24
- estimatedDeliveryThroughput: (warehousingThroughputTime: number) => Promise<number>;
22
+ configurationError: (transactionContext?: any) => DeliveryError | null;
23
+ estimatedDeliveryThroughput: (warehousingThroughputTime: number) => Promise<number | null>;
25
24
  isActive: () => boolean;
26
25
  isAutoReleaseAllowed: () => boolean;
27
- pickUpLocationById: (locationId: string) => Promise<DeliveryLocation>;
26
+ pickUpLocationById: (locationId: string) => Promise<DeliveryLocation | null>;
28
27
  pickUpLocations: () => Promise<DeliveryLocation[]>;
29
28
  send: () => Promise<boolean | Work>;
30
29
  }
31
30
 
32
31
  export interface DeliveryContext {
33
32
  countryCode?: string;
34
- deliveryProvider?: DeliveryProvider;
35
33
  order?: Order;
36
34
  orderDelivery?: OrderDelivery;
37
35
  orderPosition?: OrderPosition;
@@ -6,7 +6,7 @@ import {
6
6
  DeliveryError,
7
7
  } from './DeliveryAdapter.js';
8
8
  import { DeliveryProvider } from '@unchainedshop/core-delivery';
9
- import { OrderDelivery, OrderDeliveryStatus } from '@unchainedshop/core-orders';
9
+ import { Order, OrderDeliveryStatus } from '@unchainedshop/core-orders';
10
10
  import { Modules } from '../modules.js';
11
11
  import { createLogger } from '@unchainedshop/logger';
12
12
 
@@ -14,10 +14,10 @@ const logger = createLogger('unchained:core');
14
14
 
15
15
  export type IDeliveryDirector = IBaseDirector<IDeliveryAdapter> & {
16
16
  sendOrderDelivery: (
17
- orderDelivery: OrderDelivery,
17
+ order: Order,
18
18
  transactionContext: Record<string, any>,
19
19
  unchainedAPI: { modules: Modules },
20
- ) => Promise<OrderDelivery>;
20
+ ) => Promise<void>;
21
21
  actions: (
22
22
  deliveryProvider: DeliveryProvider,
23
23
  deliveryContext: DeliveryContext,
@@ -33,21 +33,24 @@ export const DeliveryDirector: IDeliveryDirector = {
33
33
  actions: async (deliveryProvider, deliveryContext, unchainedAPI) => {
34
34
  const Adapter = baseDirector.getAdapter(deliveryProvider.adapterKey);
35
35
 
36
+ if (!Adapter) {
37
+ throw new Error(`Delivery Plugin ${deliveryProvider.adapterKey} not available`);
38
+ }
39
+
36
40
  const context = { ...deliveryContext, ...unchainedAPI };
37
- const adapter = Adapter?.actions(deliveryProvider.configuration, context);
41
+ const adapter = Adapter.actions(deliveryProvider.configuration, context);
38
42
 
39
43
  return {
40
44
  configurationError: () => {
41
- try {
42
- return adapter.configurationError();
43
- } catch {
45
+ if (!adapter) {
44
46
  return DeliveryError.ADAPTER_NOT_FOUND;
45
47
  }
48
+ return adapter.configurationError();
46
49
  },
47
50
 
48
51
  estimatedDeliveryThroughput: async (warehousingThroughputTime) => {
49
52
  try {
50
- const throughput = await adapter.estimatedDeliveryThroughput(warehousingThroughputTime);
53
+ const throughput = await adapter?.estimatedDeliveryThroughput(warehousingThroughputTime);
51
54
  return throughput;
52
55
  } catch (error) {
53
56
  logger.warn('Delivery Director -> Error while estimating delivery throughput', {
@@ -58,6 +61,7 @@ export const DeliveryDirector: IDeliveryDirector = {
58
61
  },
59
62
 
60
63
  isActive: () => {
64
+ if (!adapter) return false;
61
65
  try {
62
66
  return adapter.isActive();
63
67
  } catch (error) {
@@ -69,6 +73,7 @@ export const DeliveryDirector: IDeliveryDirector = {
69
73
  },
70
74
 
71
75
  isAutoReleaseAllowed: () => {
76
+ if (!adapter) return false;
72
77
  try {
73
78
  return adapter.isAutoReleaseAllowed();
74
79
  } catch (error) {
@@ -80,39 +85,47 @@ export const DeliveryDirector: IDeliveryDirector = {
80
85
  },
81
86
 
82
87
  send: async () => {
88
+ if (!adapter) throw new Error('Delivery adapter not found');
83
89
  return adapter.send();
84
90
  },
85
91
 
86
92
  pickUpLocationById: async (locationId) => {
87
- return adapter.pickUpLocationById(locationId);
93
+ if (!adapter) throw new Error('Delivery adapter not found');
94
+ return adapter?.pickUpLocationById(locationId);
88
95
  },
89
96
 
90
97
  pickUpLocations: async () => {
98
+ if (!adapter) throw new Error('Delivery adapter not found');
91
99
  return adapter.pickUpLocations();
92
100
  },
93
101
  };
94
102
  },
95
103
 
96
- sendOrderDelivery: async (orderDelivery, transactionContext, unchainedAPI) => {
104
+ sendOrderDelivery: async (order, transactionContext, unchainedAPI) => {
105
+ const orderDelivery = await unchainedAPI.modules.orders.deliveries.findDelivery({
106
+ orderDeliveryId: order.deliveryId!,
107
+ });
108
+
97
109
  if (
98
- unchainedAPI.modules.orders.deliveries.normalizedStatus(orderDelivery) !== OrderDeliveryStatus.OPEN
110
+ unchainedAPI.modules.orders.deliveries.normalizedStatus(orderDelivery!) !==
111
+ OrderDeliveryStatus.OPEN
99
112
  )
100
- return orderDelivery;
113
+ return;
101
114
 
102
- const order = await unchainedAPI.modules.orders.findOrder({ orderId: orderDelivery.orderId });
103
115
  const deliveryProvider = await unchainedAPI.modules.delivery.findProvider({
104
- deliveryProviderId: orderDelivery.deliveryProviderId,
116
+ deliveryProviderId: orderDelivery!.deliveryProviderId,
105
117
  });
106
- const address = orderDelivery.context?.address || order || order.billingAddress;
118
+
119
+ const address = orderDelivery!.context?.address || order!.billingAddress;
107
120
 
108
121
  const adapter = await DeliveryDirector.actions(
109
- deliveryProvider,
122
+ deliveryProvider!,
110
123
  {
111
- order,
112
- orderDelivery,
124
+ order: order!,
125
+ orderDelivery: orderDelivery!,
113
126
  transactionContext: {
114
127
  ...(transactionContext || {}),
115
- ...(orderDelivery.context || {}),
128
+ ...(orderDelivery!.context || {}),
116
129
  ...(address || {}),
117
130
  },
118
131
  },
@@ -120,14 +133,11 @@ export const DeliveryDirector: IDeliveryDirector = {
120
133
  );
121
134
 
122
135
  const arbitraryResponseData = await adapter.send();
123
-
124
136
  if (arbitraryResponseData) {
125
- return await unchainedAPI.modules.orders.deliveries.updateStatus(orderDelivery._id, {
137
+ await unchainedAPI.modules.orders.deliveries.updateStatus(orderDelivery!._id, {
126
138
  status: OrderDeliveryStatus.DELIVERED,
127
139
  info: JSON.stringify(arbitraryResponseData),
128
140
  });
129
141
  }
130
-
131
- return orderDelivery;
132
142
  },
133
143
  };
@@ -42,7 +42,7 @@ export interface DeliveryPricingAdapterContext extends BasePricingAdapterContext
42
42
  provider: DeliveryProvider;
43
43
  providerContext?: any;
44
44
  order: Order;
45
- orderDelivery: OrderDelivery;
45
+ orderDelivery?: OrderDelivery;
46
46
  user: User;
47
47
  discounts: OrderDiscount[];
48
48
  }
@@ -52,18 +52,18 @@ export const DeliveryPricingDirector: IDeliveryPricingDirector<any> = {
52
52
  const provider = await modules.delivery.findProvider({
53
53
  deliveryProviderId: item.deliveryProviderId,
54
54
  });
55
- const user = await modules.users.findUserById(order.userId);
55
+ const user = await modules.users.findUserById(order!.userId);
56
56
  const discounts = await modules.orders.discounts.findOrderDiscounts({
57
57
  orderId: item.orderId,
58
58
  });
59
59
 
60
60
  return {
61
61
  ...unchainedAPI,
62
- countryCode: order.countryCode,
62
+ countryCode: order!.countryCode,
63
63
  currencyCode,
64
- order,
65
- provider,
66
- user,
64
+ order: order!,
65
+ provider: provider!,
66
+ user: user!,
67
67
  discounts,
68
68
  orderDelivery: item,
69
69
  providerContext: null,
@@ -78,7 +78,6 @@ export const DeliveryPricingDirector: IDeliveryPricingDirector<any> = {
78
78
  provider: context.provider,
79
79
  user: context.user,
80
80
  discounts: [],
81
- orderDelivery: null,
82
81
  providerContext: context.providerContext,
83
82
  };
84
83
  },
@@ -61,7 +61,8 @@ export const DeliveryPricingSheet = (
61
61
  category: DeliveryPricingRowCategory.Discount,
62
62
  discountId: explicitDiscountId,
63
63
  })
64
- .map(({ discountId }) => discountId);
64
+ .map(({ discountId }) => discountId)
65
+ .filter(Boolean) as string[];
65
66
 
66
67
  return [...new Set(discountIds)]
67
68
  .map((discountId) => {
@@ -78,7 +79,7 @@ export const DeliveryPricingSheet = (
78
79
  currencyCode,
79
80
  };
80
81
  })
81
- .filter(Boolean);
82
+ .filter(Boolean) as { discountId: string; amount: number; currencyCode: string }[];
82
83
  },
83
84
  };
84
85
 
@@ -1,6 +1,7 @@
1
1
  import { BaseAdapter, IBaseAdapter } from '@unchainedshop/utils';
2
2
  import {
3
3
  Enrollment,
4
+ EnrollmentOrderPositionTemplate,
4
5
  EnrollmentPeriod,
5
6
  EnrollmentPlan,
6
7
  addToDate,
@@ -10,13 +11,17 @@ import type { OrderPosition } from '@unchainedshop/core-orders';
10
11
 
11
12
  export interface EnrollmentContext {
12
13
  enrollment: Enrollment;
14
+ product: Product;
13
15
  }
14
16
 
15
17
  export interface EnrollmentAdapterActions {
16
- configurationForOrder: (params: { period: EnrollmentPeriod; products: Product[] }) => Promise<any>;
18
+ configurationForOrder: (params: { period: EnrollmentPeriod }) => Promise<{
19
+ orderContext?: Record<string, any>;
20
+ orderPositionTemplates: EnrollmentOrderPositionTemplate[];
21
+ } | null>;
17
22
  isOverdue: () => Promise<boolean>;
18
23
  isValidForActivation: () => Promise<boolean>;
19
- nextPeriod: () => Promise<EnrollmentPeriod>;
24
+ nextPeriod: () => Promise<EnrollmentPeriod | null>;
20
25
  }
21
26
 
22
27
  export type IEnrollmentAdapter = IBaseAdapter & {
@@ -71,10 +76,8 @@ export const EnrollmentAdapter: Omit<IEnrollmentAdapter, 'key' | 'label' | 'vers
71
76
  isValidForActivation: async () => false,
72
77
 
73
78
  nextPeriod: async () => {
74
- const { enrollment } = context;
75
- const product = await (context as any).modules.products.findProduct({
76
- productId: enrollment.productId,
77
- });
79
+ const { enrollment, product } = context;
80
+
78
81
  const plan = product?.plan;
79
82
  const referenceDate = new Date();
80
83
  if (!plan) return null;
@@ -10,9 +10,15 @@ const logger = createLogger('unchained:core');
10
10
  export type IEnrollmentDirector = IBaseDirector<IEnrollmentAdapter> & {
11
11
  transformOrderItemToEnrollment: (
12
12
  item: { orderPosition: OrderPosition; product: Product },
13
- doc: Omit<Enrollment, 'configuration' | 'productId' | 'quantity' | 'status' | 'periods' | 'log'>,
13
+ doc: Omit<
14
+ Enrollment,
15
+ 'configuration' | 'productId' | 'quantity' | 'status' | 'periods' | 'log' | '_id' | 'created'
16
+ >,
14
17
  unchainedAPI,
15
- ) => Promise<Omit<Enrollment, 'status' | 'periods' | 'log'>>;
18
+ ) => Promise<
19
+ Omit<Enrollment, 'status' | 'periods' | 'log' | '_id' | 'created'> &
20
+ Pick<Partial<Enrollment>, '_id' | 'created'>
21
+ >;
16
22
 
17
23
  actions: (enrollmentContext: EnrollmentContext, unchainedAPI) => Promise<EnrollmentAdapterActions>;
18
24
  };
@@ -53,12 +59,7 @@ export const EnrollmentDirector: IEnrollmentDirector = {
53
59
  actions: async (enrollmentContext, unchainedAPI) => {
54
60
  const context = { ...enrollmentContext, ...unchainedAPI };
55
61
 
56
- // Resolve adapter
57
- const product = await context.modules.products.findProduct({
58
- productId: context.enrollment.productId,
59
- });
60
-
61
- const Adapter = findAppropriateAdapters(product?.plan)?.[0];
62
+ const Adapter = findAppropriateAdapters(enrollmentContext.product.plan)?.[0];
62
63
 
63
64
  if (!Adapter) {
64
65
  throw new Error('No suitable enrollment plugin available for this plan configuration');
@@ -1,16 +1,52 @@
1
1
  import { subscribe } from '@unchainedshop/events';
2
2
  import { BaseWorker, IWorker } from './BaseWorker.js';
3
3
  import { WorkerEventTypes } from '@unchainedshop/core-worker';
4
+ import { setTimeout } from 'node:timers/promises';
5
+ import { createLogger } from '@unchainedshop/logger';
4
6
 
5
- function debounce<T extends (...args: any) => any>(func: T, wait) {
6
- let timeout;
7
- return (...args) => {
8
- clearTimeout(timeout);
9
- timeout = setTimeout(() => {
10
- timeout = null;
11
- func(...args);
12
- }, wait);
7
+ const logger = createLogger('unchained:worker');
8
+
9
+ function debounce<T extends (...args: any[]) => Promise<any>>(
10
+ func: T,
11
+ wait: number,
12
+ ): T & { cancel: () => void } {
13
+ let abortController: AbortController | null = null;
14
+
15
+ const debounced = (async (...args: Parameters<T>) => {
16
+ // Cancel any pending execution
17
+ if (abortController) {
18
+ abortController.abort();
19
+ }
20
+
21
+ // Create new abort controller for this execution
22
+ abortController = new AbortController();
23
+
24
+ try {
25
+ // Wait for the debounce period
26
+ await setTimeout(wait, undefined, { signal: abortController.signal });
27
+
28
+ // If we reach here, the timeout completed without being aborted
29
+ const result = await func(...args);
30
+ abortController = null;
31
+ return result;
32
+ } catch (error) {
33
+ // If the operation was aborted, don't execute the function
34
+ if (error.name === 'AbortError') {
35
+ return;
36
+ }
37
+ // Re-throw any other errors
38
+ throw error;
39
+ }
40
+ }) as T & { cancel: () => void };
41
+
42
+ debounced.cancel = () => {
43
+ if (abortController) {
44
+ abortController.abort();
45
+ abortController = null;
46
+ }
13
47
  };
48
+
49
+ return debounced;
14
50
  }
15
51
 
16
52
  export interface EventListenerWorkerParams {
@@ -33,28 +69,32 @@ export const EventListenerWorker: IWorker<EventListenerWorkerParams> = {
33
69
 
34
70
  // Debounce in the event of many work queue events conflicting with each other
35
71
  const processWorkQueue = debounce<() => Promise<void>>(async () => {
36
- await baseWorkerActions.process({
37
- maxWorkItemCount: 1, // only one work item at a time, else we could end up in a loop
38
- referenceDate: EventListenerWorker.getFloorDate(),
39
- });
72
+ try {
73
+ await baseWorkerActions.process({
74
+ maxWorkItemCount: 1, // only one work item at a time, else we could end up in a loop
75
+ referenceDate: EventListenerWorker.getFloorDate(),
76
+ });
77
+ } catch (error) {
78
+ // Log error but don't crash the worker
79
+ logger.error(error);
80
+ }
40
81
  }, 300);
41
82
 
42
83
  return {
43
84
  ...baseWorkerActions,
44
85
 
45
- start() {
86
+ async start() {
46
87
  subscribe(WorkerEventTypes.ADDED, processWorkQueue);
47
88
  subscribe(WorkerEventTypes.FINISHED, processWorkQueue);
48
89
 
49
- setTimeout(async () => {
50
- await baseWorkerActions.autorescheduleTypes({
51
- referenceDate: EventListenerWorker.getFloorDate(),
52
- });
53
- }, 300);
90
+ await setTimeout(300);
91
+ await baseWorkerActions.autorescheduleTypes({
92
+ referenceDate: EventListenerWorker.getFloorDate(),
93
+ });
54
94
  },
55
95
 
56
96
  stop() {
57
- /* */
97
+ processWorkQueue.cancel();
58
98
  },
59
99
  };
60
100
  },
@@ -3,7 +3,7 @@ import { subscribe } from '@unchainedshop/events';
3
3
  import { Work, WorkData, WorkerEventTypes } from '@unchainedshop/core-worker';
4
4
 
5
5
  export interface FailedReschedulerParams {
6
- transformRetry?: (workData: WorkData) => Promise<WorkData | null>;
6
+ transformRetry?: (workData: WorkData, lastFailedWork: Work) => Promise<WorkData | null>;
7
7
  }
8
8
 
9
9
  export interface IScheduler<P> {
@@ -55,7 +55,7 @@ export const FailedRescheduler: IScheduler<FailedReschedulerParams> = {
55
55
  scheduled,
56
56
  };
57
57
  await unchainedAPI.modules.worker.addWork(
58
- transformRetry ? await transformRetry(newWorkData) : newWorkData,
58
+ transformRetry ? await transformRetry(newWorkData, work) : newWorkData,
59
59
  );
60
60
  }
61
61
  };
@@ -21,7 +21,7 @@ export interface FilterAdapterActions {
21
21
 
22
22
  searchAssortments: (
23
23
  params: {
24
- assortmentIds: string[];
24
+ assortmentIds?: string[];
25
25
  },
26
26
  options: {
27
27
  filterSelector: mongodb.Filter<Filter>;
@@ -29,11 +29,11 @@ export interface FilterAdapterActions {
29
29
  sortStage: mongodb.FindOptions['sort'];
30
30
  locale: Intl.Locale;
31
31
  },
32
- ) => Promise<string[]>;
32
+ ) => Promise<string[] | undefined>;
33
33
 
34
34
  searchProducts: (
35
35
  params: {
36
- productIds: string[];
36
+ productIds?: string[];
37
37
  },
38
38
  options: {
39
39
  filterSelector: mongodb.Filter<Filter>;
@@ -41,7 +41,7 @@ export interface FilterAdapterActions {
41
41
  sortStage: mongodb.FindOptions['sort'];
42
42
  locale: Intl.Locale;
43
43
  },
44
- ) => Promise<string[]>;
44
+ ) => Promise<string[] | undefined>;
45
45
 
46
46
  transformFilterSelector: (
47
47
  query: mongodb.Filter<Filter>,
@@ -12,7 +12,7 @@ import {
12
12
  import { Product } from '@unchainedshop/core-products';
13
13
  import { Modules } from '../modules.js';
14
14
 
15
- export const parseQueryArray = (query: SearchFilterQuery): Record<string, string[]> =>
15
+ export const parseQueryArray = (query?: SearchFilterQuery): Record<string, string[]> =>
16
16
  (query || []).reduce(
17
17
  (accumulator, { key, value }) => ({
18
18
  ...accumulator,
@@ -80,7 +80,7 @@ export const FilterDirector: IFilterDirector = {
80
80
  initialValue: V,
81
81
  ) => {
82
82
  if (adapters.length === 0) {
83
- return null;
83
+ return initialValue;
84
84
  }
85
85
  return adapters.reduce(async (lastSearchPromise, adapter, index) => {
86
86
  return reducer(lastSearchPromise, adapter, index);
@@ -89,22 +89,21 @@ export const FilterDirector: IFilterDirector = {
89
89
 
90
90
  return {
91
91
  aggregateProductIds: (params) => {
92
- const reducedProductIds = adapters.reduce(
92
+ return adapters.reduce(
93
93
  (productIds, adapter) => adapter.aggregateProductIds({ productIds }),
94
94
  params.productIds,
95
95
  );
96
- return reducedProductIds;
97
96
  },
98
97
 
99
98
  searchAssortments: async (params, options) => {
100
- return reduceAdapters<string[]>(async (lastSearchPromise, adapter) => {
99
+ return reduceAdapters<string[] | undefined>(async (lastSearchPromise, adapter) => {
101
100
  const assortmentIds = await lastSearchPromise;
102
101
  return adapter.searchAssortments({ assortmentIds }, options);
103
102
  }, params.assortmentIds);
104
103
  },
105
104
 
106
105
  searchProducts: async (params, options) => {
107
- return reduceAdapters<string[]>(async (lastSearchPromise, adapter) => {
106
+ return reduceAdapters<string[] | undefined>(async (lastSearchPromise, adapter) => {
108
107
  const productIds = await lastSearchPromise;
109
108
  return adapter.searchProducts({ productIds }, options);
110
109
  }, params.productIds);
@@ -113,19 +112,19 @@ export const FilterDirector: IFilterDirector = {
113
112
  transformProductSelector: async (defaultSelector, options) => {
114
113
  return reduceAdapters<mongodb.Filter<Product>>(async (lastSelector, adapter) => {
115
114
  return adapter.transformProductSelector(await lastSelector, options);
116
- }, defaultSelector || null);
115
+ }, defaultSelector);
117
116
  },
118
117
 
119
118
  transformSortStage: async (defaultStage, options) => {
120
119
  return reduceAdapters<mongodb.FindOptions<Product>['sort']>(async (lastSortStage, adapter) => {
121
120
  return adapter.transformSortStage(await lastSortStage, options);
122
- }, defaultStage || null);
121
+ }, defaultStage);
123
122
  },
124
123
 
125
124
  transformFilterSelector: async (defaultSelector) => {
126
125
  return reduceAdapters<mongodb.Filter<Filter>>(async (lastSelector, adapter) => {
127
126
  return adapter.transformFilterSelector(await lastSelector);
128
- }, defaultSelector || null);
127
+ }, defaultSelector);
129
128
  },
130
129
  };
131
130
  },
@@ -161,7 +160,7 @@ export const FilterDirector: IFilterDirector = {
161
160
  filter.type === FilterType.SWITCH
162
161
  ? {
163
162
  true: await this.findProductIds(filter, { value: true }, unchainedAPI),
164
- false: await this.findProductIds(filter, { value: false }, unchainedAPI),
163
+ false: await this.findProductIds(filter, { value: { $in: [null, false] } }, unchainedAPI),
165
164
  }
166
165
  : await (filter.options || []).reduce(async (accumulatorPromise, option) => {
167
166
  const accumulator = await accumulatorPromise;
@@ -188,7 +187,7 @@ export const FilterDirector: IFilterDirector = {
188
187
  values,
189
188
  Object.keys(keyToProductIdMap),
190
189
  );
191
- const result = [];
190
+ const result: string[] = [];
192
191
  for (const key of filteredKeys) {
193
192
  const additionalValues = key === undefined ? allProductIds : keyToProductIdMap[key];
194
193
  if (additionalValues) {
@@ -245,7 +244,7 @@ export const FilterDirector: IFilterDirector = {
245
244
  async filterFacets(filter, params, unchainedAPI) {
246
245
  const { allProductIds, searchQuery, forceLiveCollection, otherFilters } = params;
247
246
 
248
- const filterQueryParsed = parseQueryArray(searchQuery?.filterQuery);
247
+ const filterQueryParsed = parseQueryArray(searchQuery.filterQuery);
249
248
 
250
249
  // The examinedProductIdSet is a set of product id's that:
251
250
  // - Fit this filter generally