@lyxa.ai/core 1.0.11 → 1.0.13

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 (310) hide show
  1. package/dist/index.js +3 -0
  2. package/dist/index.js.map +1 -1
  3. package/dist/libraries/auth/index.js +3 -2
  4. package/dist/libraries/auth/index.js.map +1 -1
  5. package/dist/libraries/auth/refreshtoken.js +0 -1
  6. package/dist/libraries/auth/refreshtoken.js.map +1 -1
  7. package/dist/libraries/event/index.js.map +1 -1
  8. package/dist/libraries/mongo/index.d.ts +1 -1
  9. package/dist/libraries/mongo/index.js +33 -4
  10. package/dist/libraries/mongo/index.js.map +1 -1
  11. package/dist/libraries/mongo/models/activity-log.model.d.ts +11 -0
  12. package/dist/libraries/mongo/models/activity-log.model.js +44 -0
  13. package/dist/libraries/mongo/models/activity-log.model.js.map +1 -0
  14. package/dist/libraries/mongo/models/admin-access-control.model.d.ts +11 -0
  15. package/dist/libraries/mongo/models/admin-access-control.model.js +55 -0
  16. package/dist/libraries/mongo/models/admin-access-control.model.js.map +1 -0
  17. package/dist/libraries/mongo/models/admin.model.d.ts +10 -0
  18. package/dist/libraries/mongo/models/admin.model.js +48 -0
  19. package/dist/libraries/mongo/models/admin.model.js.map +1 -0
  20. package/dist/libraries/mongo/models/app-screen-setting.model.d.ts +11 -0
  21. package/dist/libraries/mongo/models/app-screen-setting.model.js +48 -0
  22. package/dist/libraries/mongo/models/app-screen-setting.model.js.map +1 -0
  23. package/dist/libraries/mongo/models/attribute.model.d.ts +15 -0
  24. package/dist/libraries/mongo/models/attribute.model.js +65 -0
  25. package/dist/libraries/mongo/models/attribute.model.js.map +1 -0
  26. package/dist/libraries/mongo/models/auth-identity.model.d.ts +8 -0
  27. package/dist/libraries/mongo/models/auth-identity.model.js +33 -0
  28. package/dist/libraries/mongo/models/auth-identity.model.js.map +1 -0
  29. package/dist/libraries/mongo/models/banner.model.d.ts +22 -0
  30. package/dist/libraries/mongo/models/banner.model.js +91 -0
  31. package/dist/libraries/mongo/models/banner.model.js.map +1 -0
  32. package/dist/libraries/mongo/models/base/base-coupon.model.d.ts +15 -0
  33. package/dist/libraries/mongo/models/base/base-coupon.model.js +70 -0
  34. package/dist/libraries/mongo/models/base/base-coupon.model.js.map +1 -0
  35. package/dist/libraries/mongo/models/base/base-review.model.d.ts +13 -0
  36. package/dist/libraries/mongo/models/base/base-review.model.js +55 -0
  37. package/dist/libraries/mongo/models/base/base-review.model.js.map +1 -0
  38. package/dist/libraries/mongo/models/bob-finance.model.d.ts +29 -0
  39. package/dist/libraries/mongo/models/bob-finance.model.js +122 -0
  40. package/dist/libraries/mongo/models/bob-finance.model.js.map +1 -0
  41. package/dist/libraries/mongo/models/brand.model.d.ts +7 -0
  42. package/dist/libraries/mongo/models/brand.model.js +32 -0
  43. package/dist/libraries/mongo/models/brand.model.js.map +1 -0
  44. package/dist/libraries/mongo/models/category.model.d.ts +13 -0
  45. package/dist/libraries/mongo/models/category.model.js +59 -0
  46. package/dist/libraries/mongo/models/category.model.js.map +1 -0
  47. package/dist/libraries/mongo/models/counter.model.d.ts +8 -0
  48. package/dist/libraries/mongo/models/counter.model.js +33 -0
  49. package/dist/libraries/mongo/models/counter.model.js.map +1 -0
  50. package/dist/libraries/mongo/models/coupon.model.d.ts +9 -0
  51. package/dist/libraries/mongo/models/coupon.model.js +38 -0
  52. package/dist/libraries/mongo/models/coupon.model.js.map +1 -0
  53. package/dist/libraries/mongo/models/deal-setting.model.d.ts +12 -0
  54. package/dist/libraries/mongo/models/deal-setting.model.js +53 -0
  55. package/dist/libraries/mongo/models/deal-setting.model.js.map +1 -0
  56. package/dist/libraries/mongo/models/dish.model.d.ts +19 -0
  57. package/dist/libraries/mongo/models/dish.model.js +84 -0
  58. package/dist/libraries/mongo/models/dish.model.js.map +1 -0
  59. package/dist/libraries/mongo/models/embedded/attribute-item.model.d.ts +5 -0
  60. package/dist/libraries/mongo/models/embedded/attribute-item.model.js +32 -0
  61. package/dist/libraries/mongo/models/embedded/attribute-item.model.js.map +1 -0
  62. package/dist/libraries/mongo/models/embedded/attribute-map.model.d.ts +7 -0
  63. package/dist/libraries/mongo/models/embedded/attribute-map.model.js +29 -0
  64. package/dist/libraries/mongo/models/embedded/attribute-map.model.js.map +1 -0
  65. package/dist/libraries/mongo/models/embedded/business-development-setting.model.d.ts +4 -0
  66. package/dist/libraries/mongo/models/embedded/business-development-setting.model.js +27 -0
  67. package/dist/libraries/mongo/models/embedded/business-development-setting.model.js.map +1 -0
  68. package/dist/libraries/mongo/models/embedded/charge-setting.model.d.ts +14 -0
  69. package/dist/libraries/mongo/models/embedded/charge-setting.model.js +60 -0
  70. package/dist/libraries/mongo/models/embedded/charge-setting.model.js.map +1 -0
  71. package/dist/libraries/mongo/models/embedded/charge.model.d.ts +5 -0
  72. package/dist/libraries/mongo/models/embedded/charge.model.js +28 -0
  73. package/dist/libraries/mongo/models/embedded/charge.model.js.map +1 -0
  74. package/dist/libraries/mongo/models/embedded/courier-setting.model.d.ts +4 -0
  75. package/dist/libraries/mongo/models/embedded/courier-setting.model.js +27 -0
  76. package/dist/libraries/mongo/models/embedded/courier-setting.model.js.map +1 -0
  77. package/dist/libraries/mongo/models/embedded/currency-setting.model.d.ts +7 -0
  78. package/dist/libraries/mongo/models/embedded/currency-setting.model.js +38 -0
  79. package/dist/libraries/mongo/models/embedded/currency-setting.model.js.map +1 -0
  80. package/dist/libraries/mongo/models/embedded/currency.model.d.ts +10 -0
  81. package/dist/libraries/mongo/models/embedded/currency.model.js +57 -0
  82. package/dist/libraries/mongo/models/embedded/currency.model.js.map +1 -0
  83. package/dist/libraries/mongo/models/embedded/featured-item.mode.d.ts +6 -0
  84. package/dist/libraries/mongo/models/embedded/featured-item.mode.js +33 -0
  85. package/dist/libraries/mongo/models/embedded/featured-item.mode.js.map +1 -0
  86. package/dist/libraries/mongo/models/embedded/otp-fields.model.d.ts +5 -0
  87. package/dist/libraries/mongo/models/embedded/otp-fields.model.js +32 -0
  88. package/dist/libraries/mongo/models/embedded/otp-fields.model.js.map +1 -0
  89. package/dist/libraries/mongo/models/embedded/package.model.d.ts +25 -0
  90. package/dist/libraries/mongo/models/embedded/package.model.js +86 -0
  91. package/dist/libraries/mongo/models/embedded/package.model.js.map +1 -0
  92. package/dist/libraries/mongo/models/embedded/parent-document.model.d.ts +5 -0
  93. package/dist/libraries/mongo/models/embedded/parent-document.model.js +32 -0
  94. package/dist/libraries/mongo/models/embedded/parent-document.model.js.map +1 -0
  95. package/dist/libraries/mongo/models/embedded/payout-setting.model.d.ts +5 -0
  96. package/dist/libraries/mongo/models/embedded/payout-setting.model.js +28 -0
  97. package/dist/libraries/mongo/models/embedded/payout-setting.model.js.map +1 -0
  98. package/dist/libraries/mongo/models/embedded/price.model.d.ts +5 -0
  99. package/dist/libraries/mongo/models/embedded/price.model.js +32 -0
  100. package/dist/libraries/mongo/models/embedded/price.model.js.map +1 -0
  101. package/dist/libraries/mongo/models/embedded/product-nutrition.model.d.ts +5 -0
  102. package/dist/libraries/mongo/models/embedded/product-nutrition.model.js +32 -0
  103. package/dist/libraries/mongo/models/embedded/product-nutrition.model.js.map +1 -0
  104. package/dist/libraries/mongo/models/embedded/referral-discount-config.model.d.ts +6 -0
  105. package/dist/libraries/mongo/models/embedded/referral-discount-config.model.js +38 -0
  106. package/dist/libraries/mongo/models/embedded/referral-discount-config.model.js.map +1 -0
  107. package/dist/libraries/mongo/models/embedded/rider-setting.model.d.ts +6 -0
  108. package/dist/libraries/mongo/models/embedded/rider-setting.model.js +37 -0
  109. package/dist/libraries/mongo/models/embedded/rider-setting.model.js.map +1 -0
  110. package/dist/libraries/mongo/models/embedded/service-fee-setting.model.d.ts +5 -0
  111. package/dist/libraries/mongo/models/embedded/service-fee-setting.model.js +28 -0
  112. package/dist/libraries/mongo/models/embedded/service-fee-setting.model.js.map +1 -0
  113. package/dist/libraries/mongo/models/embedded/shop-document.model.d.ts +5 -0
  114. package/dist/libraries/mongo/models/embedded/shop-document.model.js +32 -0
  115. package/dist/libraries/mongo/models/embedded/shop-document.model.js.map +1 -0
  116. package/dist/libraries/mongo/models/embedded/subscription-summary.model.d.ts +8 -0
  117. package/dist/libraries/mongo/models/embedded/subscription-summary.model.js +47 -0
  118. package/dist/libraries/mongo/models/embedded/subscription-summary.model.js.map +1 -0
  119. package/dist/libraries/mongo/models/embedded/zone-geometry.mode.d.ts +4 -0
  120. package/dist/libraries/mongo/models/embedded/zone-geometry.mode.js +27 -0
  121. package/dist/libraries/mongo/models/embedded/zone-geometry.mode.js.map +1 -0
  122. package/dist/libraries/mongo/models/faq.model.d.ts +12 -0
  123. package/dist/libraries/mongo/models/faq.model.js +53 -0
  124. package/dist/libraries/mongo/models/faq.model.js.map +1 -0
  125. package/dist/libraries/mongo/models/favourite.model.d.ts +13 -0
  126. package/dist/libraries/mongo/models/favourite.model.js +46 -0
  127. package/dist/libraries/mongo/models/favourite.model.js.map +1 -0
  128. package/dist/libraries/mongo/models/featured-setting.model.d.ts +9 -0
  129. package/dist/libraries/mongo/models/featured-setting.model.js +34 -0
  130. package/dist/libraries/mongo/models/featured-setting.model.js.map +1 -0
  131. package/dist/libraries/mongo/models/filter-container.model.d.ts +11 -0
  132. package/dist/libraries/mongo/models/filter-container.model.js +53 -0
  133. package/dist/libraries/mongo/models/filter-container.model.js.map +1 -0
  134. package/dist/libraries/mongo/models/list-container.model.d.ts +17 -0
  135. package/dist/libraries/mongo/models/list-container.model.js +70 -0
  136. package/dist/libraries/mongo/models/list-container.model.js.map +1 -0
  137. package/dist/libraries/mongo/models/loyalty-point-category.model.d.ts +9 -0
  138. package/dist/libraries/mongo/models/loyalty-point-category.model.js +38 -0
  139. package/dist/libraries/mongo/models/loyalty-point-category.model.js.map +1 -0
  140. package/dist/libraries/mongo/models/loyalty-point-setting.model.d.ts +9 -0
  141. package/dist/libraries/mongo/models/loyalty-point-setting.model.js +42 -0
  142. package/dist/libraries/mongo/models/loyalty-point-setting.model.js.map +1 -0
  143. package/dist/libraries/mongo/models/marketing.model.d.ts +14 -0
  144. package/dist/libraries/mongo/models/marketing.model.js +55 -0
  145. package/dist/libraries/mongo/models/marketing.model.js.map +1 -0
  146. package/dist/libraries/mongo/models/meal-plan.model.d.ts +11 -0
  147. package/dist/libraries/mongo/models/meal-plan.model.js +52 -0
  148. package/dist/libraries/mongo/models/meal-plan.model.js.map +1 -0
  149. package/dist/libraries/mongo/models/notification.model.d.ts +40 -0
  150. package/dist/libraries/mongo/models/notification.model.js +155 -0
  151. package/dist/libraries/mongo/models/notification.model.js.map +1 -0
  152. package/dist/libraries/mongo/models/nutrition.model.d.ts +8 -0
  153. package/dist/libraries/mongo/models/nutrition.model.js +33 -0
  154. package/dist/libraries/mongo/models/nutrition.model.js.map +1 -0
  155. package/dist/libraries/mongo/models/order.model.d.ts +2 -0
  156. package/dist/libraries/mongo/models/order.model.js +7 -0
  157. package/dist/libraries/mongo/models/order.model.js.map +1 -0
  158. package/dist/libraries/mongo/models/parent.model.d.ts +21 -0
  159. package/dist/libraries/mongo/models/parent.model.js +83 -0
  160. package/dist/libraries/mongo/models/parent.model.js.map +1 -0
  161. package/dist/libraries/mongo/models/payout.model.d.ts +2 -0
  162. package/dist/libraries/mongo/models/payout.model.js +7 -0
  163. package/dist/libraries/mongo/models/payout.model.js.map +1 -0
  164. package/dist/libraries/mongo/models/product-marketing.model.d.ts +13 -0
  165. package/dist/libraries/mongo/models/product-marketing.model.js +50 -0
  166. package/dist/libraries/mongo/models/product-marketing.model.js.map +1 -0
  167. package/dist/libraries/mongo/models/product.model.d.ts +21 -0
  168. package/dist/libraries/mongo/models/product.model.js +95 -0
  169. package/dist/libraries/mongo/models/product.model.js.map +1 -0
  170. package/dist/libraries/mongo/models/providers/apple-auth-identity.model.d.ts +6 -0
  171. package/dist/libraries/mongo/models/providers/apple-auth-identity.model.js +25 -0
  172. package/dist/libraries/mongo/models/providers/apple-auth-identity.model.js.map +1 -0
  173. package/dist/libraries/mongo/models/providers/buy1-get1-marketing.model.d.ts +12 -0
  174. package/dist/libraries/mongo/models/providers/buy1-get1-marketing.model.js +42 -0
  175. package/dist/libraries/mongo/models/providers/buy1-get1-marketing.model.js.map +1 -0
  176. package/dist/libraries/mongo/models/providers/custom-coupon.model.d.ts +12 -0
  177. package/dist/libraries/mongo/models/providers/custom-coupon.model.js +39 -0
  178. package/dist/libraries/mongo/models/providers/custom-coupon.model.js.map +1 -0
  179. package/dist/libraries/mongo/models/providers/discount-marketing.model.d.ts +15 -0
  180. package/dist/libraries/mongo/models/providers/discount-marketing.model.js +57 -0
  181. package/dist/libraries/mongo/models/providers/discount-marketing.model.js.map +1 -0
  182. package/dist/libraries/mongo/models/providers/email-auth-identity.model.d.ts +9 -0
  183. package/dist/libraries/mongo/models/providers/email-auth-identity.model.js +36 -0
  184. package/dist/libraries/mongo/models/providers/email-auth-identity.model.js.map +1 -0
  185. package/dist/libraries/mongo/models/providers/featured-marketing.model.d.ts +8 -0
  186. package/dist/libraries/mongo/models/providers/featured-marketing.model.js +26 -0
  187. package/dist/libraries/mongo/models/providers/featured-marketing.model.js.map +1 -0
  188. package/dist/libraries/mongo/models/providers/free-delivery-marketing.model.d.ts +8 -0
  189. package/dist/libraries/mongo/models/providers/free-delivery-marketing.model.js +26 -0
  190. package/dist/libraries/mongo/models/providers/free-delivery-marketing.model.js.map +1 -0
  191. package/dist/libraries/mongo/models/providers/global-coupon.model.d.ts +7 -0
  192. package/dist/libraries/mongo/models/providers/global-coupon.model.js +13 -0
  193. package/dist/libraries/mongo/models/providers/global-coupon.model.js.map +1 -0
  194. package/dist/libraries/mongo/models/providers/google-auth-identity.model.d.ts +6 -0
  195. package/dist/libraries/mongo/models/providers/google-auth-identity.model.js +25 -0
  196. package/dist/libraries/mongo/models/providers/google-auth-identity.model.js.map +1 -0
  197. package/dist/libraries/mongo/models/providers/individual-store-coupon.model.d.ts +11 -0
  198. package/dist/libraries/mongo/models/providers/individual-store-coupon.model.js +38 -0
  199. package/dist/libraries/mongo/models/providers/individual-store-coupon.model.js.map +1 -0
  200. package/dist/libraries/mongo/models/providers/individual-user-coupon.model.d.ts +12 -0
  201. package/dist/libraries/mongo/models/providers/individual-user-coupon.model.js +39 -0
  202. package/dist/libraries/mongo/models/providers/individual-user-coupon.model.js.map +1 -0
  203. package/dist/libraries/mongo/models/providers/loyalty-point-marketing.model.d.ts +15 -0
  204. package/dist/libraries/mongo/models/providers/loyalty-point-marketing.model.js +53 -0
  205. package/dist/libraries/mongo/models/providers/loyalty-point-marketing.model.js.map +1 -0
  206. package/dist/libraries/mongo/models/providers/phone-auth-identity.model.d.ts +8 -0
  207. package/dist/libraries/mongo/models/providers/phone-auth-identity.model.js +31 -0
  208. package/dist/libraries/mongo/models/providers/phone-auth-identity.model.js.map +1 -0
  209. package/dist/libraries/mongo/models/providers/punch-marketing.model.d.ts +13 -0
  210. package/dist/libraries/mongo/models/providers/punch-marketing.model.js +51 -0
  211. package/dist/libraries/mongo/models/providers/punch-marketing.model.js.map +1 -0
  212. package/dist/libraries/mongo/models/providers/referral-code-coupon.mode.d.ts +10 -0
  213. package/dist/libraries/mongo/models/providers/referral-code-coupon.mode.js +28 -0
  214. package/dist/libraries/mongo/models/providers/referral-code-coupon.mode.js.map +1 -0
  215. package/dist/libraries/mongo/models/providers/referral-reward-coupon.model.d.ts +12 -0
  216. package/dist/libraries/mongo/models/providers/referral-reward-coupon.model.js +39 -0
  217. package/dist/libraries/mongo/models/providers/referral-reward-coupon.model.js.map +1 -0
  218. package/dist/libraries/mongo/models/punch-marketing-history.model.d.ts +11 -0
  219. package/dist/libraries/mongo/models/punch-marketing-history.model.js +44 -0
  220. package/dist/libraries/mongo/models/punch-marketing-history.model.js.map +1 -0
  221. package/dist/libraries/mongo/models/rating-setting.model.d.ts +9 -0
  222. package/dist/libraries/mongo/models/rating-setting.model.js +38 -0
  223. package/dist/libraries/mongo/models/rating-setting.model.js.map +1 -0
  224. package/dist/libraries/mongo/models/referral-setting.model.d.ts +8 -0
  225. package/dist/libraries/mongo/models/referral-setting.model.js +33 -0
  226. package/dist/libraries/mongo/models/referral-setting.model.js.map +1 -0
  227. package/dist/libraries/mongo/models/request-area.model copy.d.ts +9 -0
  228. package/dist/libraries/mongo/models/request-area.model copy.js +34 -0
  229. package/dist/libraries/mongo/models/request-area.model copy.js.map +1 -0
  230. package/dist/libraries/mongo/models/request-area.model.d.ts +9 -0
  231. package/dist/libraries/mongo/models/request-area.model.js +34 -0
  232. package/dist/libraries/mongo/models/request-area.model.js.map +1 -0
  233. package/dist/libraries/mongo/models/rider-review.d.ts +7 -0
  234. package/dist/libraries/mongo/models/rider-review.js +28 -0
  235. package/dist/libraries/mongo/models/rider-review.js.map +1 -0
  236. package/dist/libraries/mongo/models/rider-review.model.d.ts +7 -0
  237. package/dist/libraries/mongo/models/rider-review.model.js +28 -0
  238. package/dist/libraries/mongo/models/rider-review.model.js.map +1 -0
  239. package/dist/libraries/mongo/models/rider.model.d.ts +2 -0
  240. package/dist/libraries/mongo/models/rider.model.js +7 -0
  241. package/dist/libraries/mongo/models/rider.model.js.map +1 -0
  242. package/dist/libraries/mongo/models/role.model.ts.d.ts +8 -0
  243. package/dist/libraries/mongo/models/role.model.ts.js +37 -0
  244. package/dist/libraries/mongo/models/role.model.ts.js.map +1 -0
  245. package/dist/libraries/mongo/models/setting.model.d.ts +31 -0
  246. package/dist/libraries/mongo/models/setting.model.js +116 -0
  247. package/dist/libraries/mongo/models/setting.model.js.map +1 -0
  248. package/dist/libraries/mongo/models/{address.model.d.ts → shared/address.model.d.ts} +1 -1
  249. package/dist/libraries/mongo/models/{address.model.js → shared/address.model.js} +1 -1
  250. package/dist/libraries/mongo/models/shared/address.model.js.map +1 -0
  251. package/dist/libraries/mongo/models/shared/duration.model.js.map +1 -0
  252. package/dist/libraries/mongo/models/{work-hour.model.d.ts → shared/work-hour.model.d.ts} +1 -1
  253. package/dist/libraries/mongo/models/{work-hour.model.js → shared/work-hour.model.js} +1 -1
  254. package/dist/libraries/mongo/models/shared/work-hour.model.js.map +1 -0
  255. package/dist/libraries/mongo/models/shop-access-control.model.d.ts +13 -0
  256. package/dist/libraries/mongo/models/shop-access-control.model.js +61 -0
  257. package/dist/libraries/mongo/models/shop-access-control.model.js.map +1 -0
  258. package/dist/libraries/mongo/models/shop-category.model.d.ts +12 -0
  259. package/dist/libraries/mongo/models/shop-category.model.js +45 -0
  260. package/dist/libraries/mongo/models/shop-category.model.js.map +1 -0
  261. package/dist/libraries/mongo/models/shop-meal-plan.model.d.ts +13 -0
  262. package/dist/libraries/mongo/models/shop-meal-plan.model.js +46 -0
  263. package/dist/libraries/mongo/models/shop-meal-plan.model.js.map +1 -0
  264. package/dist/libraries/mongo/models/shop-product.model.d.ts +26 -0
  265. package/dist/libraries/mongo/models/shop-product.model.js +103 -0
  266. package/dist/libraries/mongo/models/shop-product.model.js.map +1 -0
  267. package/dist/libraries/mongo/models/shop-review.d.ts +7 -0
  268. package/dist/libraries/mongo/models/shop-review.js +28 -0
  269. package/dist/libraries/mongo/models/shop-review.js.map +1 -0
  270. package/dist/libraries/mongo/models/shop.model.d.ts +50 -0
  271. package/dist/libraries/mongo/models/shop.model.js +215 -0
  272. package/dist/libraries/mongo/models/shop.model.js.map +1 -0
  273. package/dist/libraries/mongo/models/subscription-setting.model.d.ts +9 -0
  274. package/dist/libraries/mongo/models/subscription-setting.model.js +38 -0
  275. package/dist/libraries/mongo/models/subscription-setting.model.js.map +1 -0
  276. package/dist/libraries/mongo/models/subscription.model.d.ts +23 -0
  277. package/dist/libraries/mongo/models/subscription.model.js +92 -0
  278. package/dist/libraries/mongo/models/subscription.model.js.map +1 -0
  279. package/dist/libraries/mongo/models/tag.model.d.ts +11 -0
  280. package/dist/libraries/mongo/models/tag.model.js +52 -0
  281. package/dist/libraries/mongo/models/tag.model.js.map +1 -0
  282. package/dist/libraries/mongo/models/transaction.model.d.ts +2 -0
  283. package/dist/libraries/mongo/models/transaction.model.js +7 -0
  284. package/dist/libraries/mongo/models/transaction.model.js.map +1 -0
  285. package/dist/libraries/mongo/models/user.model.d.ts +16 -0
  286. package/dist/libraries/mongo/models/user.model.js +73 -0
  287. package/dist/libraries/mongo/models/user.model.js.map +1 -0
  288. package/dist/libraries/mongo/models/zone.d.ts +15 -0
  289. package/dist/libraries/mongo/models/zone.js +64 -0
  290. package/dist/libraries/mongo/models/zone.js.map +1 -0
  291. package/dist/libraries/mongo/models/zone.model..d.ts +15 -0
  292. package/dist/libraries/mongo/models/zone.model..js +64 -0
  293. package/dist/libraries/mongo/models/zone.model..js.map +1 -0
  294. package/dist/libraries/redis/index.js +0 -1
  295. package/dist/libraries/redis/index.js.map +1 -1
  296. package/dist/utilities/enum.d.ts +208 -0
  297. package/dist/utilities/enum.js +240 -1
  298. package/dist/utilities/enum.js.map +1 -1
  299. package/dist/utilities/validation/common-validation.d.ts +1 -1
  300. package/dist/utilities/validation/common-validation.js +2 -2
  301. package/dist/utilities/validation/common-validation.js.map +1 -1
  302. package/dist/utilities/validation/global-validation.d.ts +3 -1
  303. package/dist/utilities/validation/global-validation.js +9 -5
  304. package/dist/utilities/validation/global-validation.js.map +1 -1
  305. package/package.json +2 -1
  306. package/dist/libraries/mongo/models/address.model.js.map +0 -1
  307. package/dist/libraries/mongo/models/duration.model.js.map +0 -1
  308. package/dist/libraries/mongo/models/work-hour.model.js.map +0 -1
  309. /package/dist/libraries/mongo/models/{duration.model.d.ts → shared/duration.model.d.ts} +0 -0
  310. /package/dist/libraries/mongo/models/{duration.model.js → shared/duration.model.js} +0 -0
package/dist/index.js CHANGED
@@ -84,4 +84,7 @@ async function registerLibraries(options) {
84
84
  function getLibraries() {
85
85
  return typedi_1.Container.get(libraries_1.LibraryManager);
86
86
  }
87
+ bootstrapCore({ environment: EnvironmentConfigurationType_1.EnvironmentConfigurationType.DEV, instanceType: "attemptedStartup" }).then(async (f) => {
88
+ console.log("Started up.");
89
+ });
87
90
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import {LibraryManager} from \"./libraries\";\r\nimport {Container} from \"typedi\";\r\nimport mongoose from \"mongoose\";\r\nimport {ConfigurationOptions, ConfigurationService} from \"./libraries/configuration\";\r\nimport {EnvironmentConfigurationType} from \"./libraries/configuration/types/EnvironmentConfigurationType\";\r\nimport {LyxaLogger} from \"./libraries/logger\";\r\nimport {RedisService} from \"./libraries/redis\";\r\nimport {initGlobalConnection} from \"./libraries/mongo\";\r\nimport {SecretManagerService} from \"./libraries/secrets\";\r\nimport {MicroServiceDispatcher} from \"./libraries/dispatcher\";\r\nimport {TwilioService} from \"./libraries/twilio\";\r\nimport {FirebaseService} from \"./libraries/firebase\";\r\nimport {initEventBus, subscribeToEvent} from \"./libraries/event\";\r\nimport {SubscriptionRegistry} from \"./libraries/event/registry/SubscriptionRegistry\";\r\n\r\nexport { ConfigurationOptions } from \"./libraries/configuration\";\r\nexport { EnvironmentConfigurationType } from \"./libraries/configuration/types/EnvironmentConfigurationType\";\r\nexport {\r\n initGlobalConnection,\r\n createGlobalModel,\r\n createGlobalDiscriminatorModel\r\n} from './libraries/mongo';\r\n\r\nexport async function bootstrapCore(options?: ConfigurationOptions) {\r\n try {\r\n await registerLibraries(options);\r\n\r\n getLibraries().getLogger().logger.info(\"Successfully bootstrapped lyxa-core.\");\r\n\r\n const gracefulShutdown = async () => {\r\n getLibraries().getLogger().logger.info('Received shutdown signal, shutting down gracefully...');\r\n };\r\n\r\n process.on('SIGTERM', gracefulShutdown);\r\n process.on('SIGINT', gracefulShutdown);\r\n process.on('uncaughtException', (err) => {\r\n getLibraries().getLogger().logger.error('Uncaught exception, shutting down...', err);\r\n gracefulShutdown();\r\n });\r\n\r\n console.log(\"Created hooks.\");\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n}\r\n\r\nexport async function registerLibraries(options?: ConfigurationOptions) {\r\n // Setup configuration.\r\n const configurationInstance = new ConfigurationService(options);\r\n Container.set(ConfigurationService, configurationInstance);\r\n\r\n // Setup redis.\r\n const redisInstance = new RedisService(configurationInstance.options.redisURL!);\r\n Container.set(RedisService, redisInstance);\r\n\r\n // Setup secret\r\n const secretInstance = new SecretManagerService(configurationInstance, redisInstance);\r\n Container.set(SecretManagerService, secretInstance);\r\n\r\n const mongoUrl = await getLibraries().getSecretsService()\r\n .getKey(\"MONGO_URL\");\r\n\r\n await mongoose.connect(mongoUrl!, { dbName: `lyxa-${options!.environment}-${options!.tenet}` });\r\n mongoose.set('debug', getLibraries().getConfigurationService().options.environment == EnvironmentConfigurationType.DEV);\r\n\r\n await initGlobalConnection(mongoUrl!, options!.environment);\r\n\r\n // Setup logger\r\n const loggerInstance = new LyxaLogger(options!.instanceType!, mongoUrl!);\r\n Container.set(LyxaLogger, loggerInstance);\r\n\r\n // Setup firebase\r\n const firebaseInstance = new FirebaseService(configurationInstance!);\r\n Container.set(FirebaseService, firebaseInstance);\r\n\r\n // Setup microservice dispatcher\r\n const microserviceDispatcherInstance = new MicroServiceDispatcher(secretInstance);\r\n Container.set(MicroServiceDispatcher, microserviceDispatcherInstance);\r\n\r\n\r\n // Setup twilio\r\n const twilioServiceInstance = new TwilioService();\r\n Container.set(TwilioService, twilioServiceInstance);\r\n\r\n console.log(\"Initialized everything\");\r\n\r\n await initEventBus(\"amqps://vgyuplrd:wto6vUYnb4zeBI5lntKT4gj7rT8n1vwg@dog.lmq.cloudamqp.com/vgyuplrd\");\r\n const allSubscriptions = SubscriptionRegistry.getAllSubscriptions();\r\n\r\n const instantiatedServices = new Map<Function, any>();\r\n\r\n for (const { eventId, targetConstructor, methodName } of allSubscriptions) {\r\n let instance = instantiatedServices.get(targetConstructor);\r\n if (!instance) {\r\n instance = Container.get(targetConstructor as any);\r\n instantiatedServices.set(targetConstructor, instance);\r\n }\r\n\r\n await subscribeToEvent(eventId, async (payload) => {\r\n return instance[methodName](payload);\r\n });\r\n }\r\n}\r\n\r\nexport function getLibraries(): LibraryManager {\r\n return Container.get(LibraryManager)\r\n}\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import {LibraryManager} from \"./libraries\";\r\nimport {Container} from \"typedi\";\r\nimport mongoose from \"mongoose\";\r\nimport {ConfigurationOptions, ConfigurationService} from \"./libraries/configuration\";\r\nimport {EnvironmentConfigurationType} from \"./libraries/configuration/types/EnvironmentConfigurationType\";\r\nimport {LyxaLogger} from \"./libraries/logger\";\r\nimport {RedisService} from \"./libraries/redis\";\r\nimport {initGlobalConnection} from \"./libraries/mongo\";\r\nimport {SecretManagerService} from \"./libraries/secrets\";\r\nimport {MicroServiceDispatcher} from \"./libraries/dispatcher\";\r\nimport {TwilioService} from \"./libraries/twilio\";\r\nimport {FirebaseService} from \"./libraries/firebase\";\r\nimport {initEventBus, subscribeToEvent} from \"./libraries/event\";\r\nimport {SubscriptionRegistry} from \"./libraries/event/registry/SubscriptionRegistry\";\r\n\r\nexport { ConfigurationOptions } from \"./libraries/configuration\";\r\nexport { EnvironmentConfigurationType } from \"./libraries/configuration/types/EnvironmentConfigurationType\";\r\nexport {\r\n initGlobalConnection,\r\n createGlobalModel,\r\n createGlobalDiscriminatorModel\r\n} from './libraries/mongo';\r\n\r\nexport async function bootstrapCore(options?: ConfigurationOptions) {\r\n try {\r\n await registerLibraries(options);\r\n\r\n getLibraries().getLogger().logger.info(\"Successfully bootstrapped lyxa-core.\");\r\n\r\n const gracefulShutdown = async () => {\r\n getLibraries().getLogger().logger.info('Received shutdown signal, shutting down gracefully...');\r\n };\r\n\r\n process.on('SIGTERM', gracefulShutdown);\r\n process.on('SIGINT', gracefulShutdown);\r\n process.on('uncaughtException', (err) => {\r\n getLibraries().getLogger().logger.error('Uncaught exception, shutting down...', err);\r\n gracefulShutdown();\r\n });\r\n\r\n console.log(\"Created hooks.\");\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n}\r\n\r\nexport async function registerLibraries(options?: ConfigurationOptions) {\r\n // Setup configuration.\r\n const configurationInstance = new ConfigurationService(options);\r\n Container.set(ConfigurationService, configurationInstance);\r\n\r\n // Setup redis.\r\n const redisInstance = new RedisService(configurationInstance.options.redisURL!);\r\n Container.set(RedisService, redisInstance);\r\n\r\n // Setup secret\r\n const secretInstance = new SecretManagerService(configurationInstance, redisInstance);\r\n Container.set(SecretManagerService, secretInstance);\r\n\r\n const mongoUrl = await getLibraries().getSecretsService()\r\n .getKey(\"MONGO_URL\");\r\n\r\n await mongoose.connect(mongoUrl!, { dbName: `lyxa-${options!.environment}-${options!.tenet}` });\r\n mongoose.set('debug', getLibraries().getConfigurationService().options.environment == EnvironmentConfigurationType.DEV);\r\n\r\n await initGlobalConnection(mongoUrl!, options!.environment);\r\n\r\n // Setup logger\r\n const loggerInstance = new LyxaLogger(options!.instanceType!, mongoUrl!);\r\n Container.set(LyxaLogger, loggerInstance);\r\n\r\n // Setup firebase\r\n const firebaseInstance = new FirebaseService(configurationInstance!);\r\n Container.set(FirebaseService, firebaseInstance);\r\n\r\n // Setup microservice dispatcher\r\n const microserviceDispatcherInstance = new MicroServiceDispatcher(secretInstance);\r\n Container.set(MicroServiceDispatcher, microserviceDispatcherInstance);\r\n\r\n\r\n // Setup twilio\r\n const twilioServiceInstance = new TwilioService();\r\n Container.set(TwilioService, twilioServiceInstance);\r\n\r\n console.log(\"Initialized everything\");\r\n\r\n await initEventBus(\"amqps://vgyuplrd:wto6vUYnb4zeBI5lntKT4gj7rT8n1vwg@dog.lmq.cloudamqp.com/vgyuplrd\");\r\n const allSubscriptions = SubscriptionRegistry.getAllSubscriptions();\r\n\r\n const instantiatedServices = new Map<Function, any>();\r\n\r\n for (const { eventId, targetConstructor, methodName } of allSubscriptions) {\r\n let instance = instantiatedServices.get(targetConstructor);\r\n if (!instance) {\r\n instance = Container.get(targetConstructor as any);\r\n instantiatedServices.set(targetConstructor, instance);\r\n }\r\n\r\n await subscribeToEvent(eventId, async (payload) => {\r\n return instance[methodName](payload);\r\n });\r\n }\r\n}\r\n\r\nexport function getLibraries(): LibraryManager {\r\n return Container.get(LibraryManager)\r\n}\r\n\r\nbootstrapCore({environment: EnvironmentConfigurationType.DEV, instanceType: \"attemptedStartup\"}).then(async f => {\r\n console.log(\"Started up.\")\r\n})\r\n"]}
@@ -14,9 +14,10 @@ exports.revokeAllRefreshTokens = revokeAllRefreshTokens;
14
14
  exports.signTokenPair = signTokenPair;
15
15
  exports.handleTokenRenewal = handleTokenRenewal;
16
16
  const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
17
- const index_1 = require("../../index");
18
17
  const crypto_1 = require("crypto");
19
18
  const refreshtoken_1 = require("./refreshtoken");
19
+ const index_1 = require("../../index");
20
+ const mongo_1 = require("../mongo");
20
21
  var AuthEntityType;
21
22
  (function (AuthEntityType) {
22
23
  AuthEntityType["USER"] = "USER";
@@ -242,5 +243,5 @@ async function handleTokenRenewal(refreshToken) {
242
243
  }
243
244
  };
244
245
  }
245
- exports.RefreshTokenModel = (0, index_1.createGlobalModel)(refreshtoken_1.RefreshToken);
246
+ exports.RefreshTokenModel = (0, mongo_1.createGlobalModel)(refreshtoken_1.RefreshToken);
246
247
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/auth/index.ts"],"names":[],"mappings":"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","sourcesContent":["import jwt, { SignOptions, JwtPayload } from \"jsonwebtoken\";\r\nimport {createGlobalModel, getLibraries} from \"../../index\";\r\nimport { EntityContext } from \"../trpc/context\";\r\nimport { randomBytes } from \"crypto\";\r\nimport {getModelForClass} from \"@typegoose/typegoose\";\r\nimport {RefreshToken} from \"./refreshtoken\";\r\n\r\nexport enum AuthEntityType {\r\n USER = \"USER\",\r\n SELLER = \"SELLER\",\r\n DELIVERY_BOY = \"DELIVERY_BOY\",\r\n CRM = \"CRM\"\r\n}\r\n\r\nexport enum TokenType {\r\n ACCESS = \"ACCESS\",\r\n REFRESH = \"REFRESH\"\r\n}\r\n\r\nexport interface RefreshTokenRecord {\r\n token: string;\r\n entityId: string;\r\n entityType: AuthEntityType;\r\n expiresAt: Date;\r\n isRevoked: boolean;\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\n/**\r\n * Sign a JWT access token for the given entity (id + type).\r\n * It will fetch the secret for that entity type and create a token.\r\n */\r\nexport async function signAccessToken(\r\n entity: { id: string; type: AuthEntityType, parameters: Record<string, unknown> },\r\n options?: SignOptions\r\n): Promise<string> {\r\n if (!entity?.type) {\r\n throw new Error('Entity type is required to sign token');\r\n }\r\n\r\n const secret = await getLibraries()\r\n .getSecretsService()\r\n .getKey(`${entity.type.toUpperCase()}_JWT_TOKEN`);\r\n\r\n if (!secret) {\r\n throw new Error(`No secret found for entity type ${entity.type}`);\r\n }\r\n\r\n const payload = {\r\n id: entity.id,\r\n type: entity.type,\r\n parameters: entity.parameters,\r\n tokenType: TokenType.ACCESS\r\n };\r\n\r\n const tokenOptions: SignOptions = {\r\n ...options,\r\n expiresIn: options?.expiresIn || '1d'\r\n };\r\n\r\n return jwt.sign(payload, secret, tokenOptions);\r\n}\r\n\r\n/**\r\n * Generate a refresh token for the given entity\r\n */\r\nexport async function generateRefreshToken(\r\n entity: { id: string; type: AuthEntityType, parameters?: Record<string, unknown> },\r\n options?: { expiresIn?: string | number }\r\n): Promise<string> {\r\n const tokenValue = randomBytes(40).toString('hex');\r\n\r\n const expiresIn = options?.expiresIn || '7d';\r\n const expiresAt = new Date();\r\n\r\n if (typeof expiresIn === 'string') {\r\n // Parse duration strings like '7d', '30d', etc.\r\n const match = expiresIn.match(/^(\\d+)([smhdwy])$/);\r\n if (match) {\r\n const value = parseInt(match[1]);\r\n const unit = match[2];\r\n\r\n switch (unit) {\r\n case 's': expiresAt.setSeconds(expiresAt.getSeconds() + value); break;\r\n case 'm': expiresAt.setMinutes(expiresAt.getMinutes() + value); break;\r\n case 'h': expiresAt.setHours(expiresAt.getHours() + value); break;\r\n case 'd': expiresAt.setDate(expiresAt.getDate() + value); break;\r\n case 'w': expiresAt.setDate(expiresAt.getDate() + (value * 7)); break;\r\n case 'y': expiresAt.setFullYear(expiresAt.getFullYear() + value); break;\r\n }\r\n } else {\r\n // Default to 7 days if format is invalid\r\n expiresAt.setDate(expiresAt.getDate() + 7);\r\n }\r\n } else if (typeof expiresIn === 'number') {\r\n // Interpret number as seconds\r\n expiresAt.setSeconds(expiresAt.getSeconds() + expiresIn);\r\n }\r\n\r\n await storeRefreshToken({\r\n token: tokenValue,\r\n entityId: entity.id,\r\n entityType: entity.type,\r\n expiresAt,\r\n isRevoked: false,\r\n metadata: entity.parameters\r\n });\r\n\r\n return tokenValue;\r\n}\r\n\r\n/**\r\n * Store a refresh token in the database\r\n */\r\nasync function storeRefreshToken(tokenRecord: RefreshTokenRecord): Promise<void> {\r\n const tokenRepository = getLibraries().getAuthTokenRepository();\r\n await tokenRepository.saveRefreshToken(tokenRecord);\r\n}\r\n\r\n/**\r\n * Verify an access token for the given entity types\r\n */\r\nexport async function verifyAccessToken(entityTypes: AuthEntityType[], token: string): Promise<EntityContext | undefined> {\r\n for(const entityType of entityTypes) {\r\n const secret = await getLibraries().getSecretsService().getKey(entityType.toUpperCase() + \"_JWT_TOKEN\");\r\n\r\n try {\r\n const decoded = jwt.verify(token, secret!) as EntityContext & { tokenType?: TokenType };\r\n\r\n // Verify this is an access token\r\n if (decoded.tokenType !== TokenType.ACCESS) {\r\n continue;\r\n }\r\n\r\n return decoded;\r\n } catch(err) {\r\n // Continue to the next entity type\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Validate a refresh token and return the associated entity\r\n */\r\nexport async function validateRefreshToken(token: string): Promise<{\r\n valid: boolean;\r\n entity?: { id: string; type: AuthEntityType; parameters?: Record<string, unknown> };\r\n}> {\r\n const tokenRepository = getLibraries().getAuthTokenRepository();\r\n const storedToken = await tokenRepository.findRefreshToken(token);\r\n\r\n if (!storedToken) {\r\n return { valid: false };\r\n }\r\n\r\n if (storedToken.expiresAt && new Date() > storedToken.expiresAt) {\r\n return { valid: false };\r\n }\r\n\r\n if (storedToken.isRevoked) {\r\n return { valid: false };\r\n }\r\n\r\n return {\r\n valid: true,\r\n entity: {\r\n id: storedToken.entityId,\r\n type: storedToken.entityType,\r\n parameters: storedToken.metadata\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Refresh authentication tokens\r\n * Returns new access and refresh tokens\r\n */\r\nexport async function refreshTokens(refreshToken: string): Promise<{\r\n accessToken: string;\r\n refreshToken: string;\r\n entity: { id: string; type: AuthEntityType };\r\n} | null> {\r\n // Validate the refresh token\r\n const validation = await validateRefreshToken(refreshToken);\r\n\r\n if (!validation.valid || !validation.entity) {\r\n return null;\r\n }\r\n\r\n await revokeRefreshToken(refreshToken);\r\n\r\n // Create new tokens\r\n const entity = validation.entity;\r\n const newAccessToken = await signAccessToken({\r\n id: entity.id,\r\n type: entity.type,\r\n parameters: entity.parameters || {}\r\n });\r\n\r\n const newRefreshToken = await generateRefreshToken({\r\n id: entity.id,\r\n type: entity.type,\r\n parameters: entity.parameters\r\n });\r\n\r\n return {\r\n accessToken: newAccessToken,\r\n refreshToken: newRefreshToken,\r\n entity: {\r\n id: entity.id,\r\n type: entity.type\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Revoke a refresh token\r\n */\r\nexport async function revokeRefreshToken(token: string): Promise<boolean> {\r\n const tokenRepository = getLibraries().getAuthTokenRepository();\r\n return tokenRepository.revokeRefreshToken(token);\r\n}\r\n\r\n/**\r\n * Revoke all refresh tokens for a specific entity\r\n */\r\nexport async function revokeAllRefreshTokens(entityId: string, entityType: AuthEntityType): Promise<boolean> {\r\n const tokenRepository = getLibraries().getAuthTokenRepository();\r\n return tokenRepository.revokeAllRefreshTokensForEntity(entityId, entityType);\r\n}\r\n\r\n/**\r\n * Sign both access and refresh tokens - utility for initial login/authentication\r\n */\r\nexport async function signTokenPair(\r\n entity: { id: string; type: AuthEntityType; parameters?: Record<string, unknown> },\r\n options?: { accessTokenOptions?: SignOptions; refreshTokenExpiresIn?: string | number }\r\n): Promise<{\r\n accessToken: string;\r\n refreshToken: string;\r\n}> {\r\n const accessToken = await signAccessToken({\r\n id: entity.id,\r\n type: entity.type,\r\n parameters: entity.parameters || {}\r\n }, options?.accessTokenOptions);\r\n\r\n const refreshToken = await generateRefreshToken({\r\n id: entity.id,\r\n type: entity.type,\r\n parameters: entity.parameters\r\n }, { expiresIn: options?.refreshTokenExpiresIn });\r\n\r\n return {\r\n accessToken,\r\n refreshToken\r\n };\r\n}\r\n\r\n/**\r\n * Handle the refresh token validation and renewal logic\r\n * @param refreshToken The refresh token to validate or renew\r\n * @returns Result object with token status and renewal information\r\n */\r\nexport async function handleTokenRenewal(\r\n refreshToken: string,\r\n): Promise<{\r\n success: boolean;\r\n entity?: {\r\n id: string;\r\n type: AuthEntityType;\r\n parameters: Record<string, unknown>;\r\n };\r\n tokenStatus: 'valid' | 'expired' | 'revoked' | 'invalid';\r\n newTokens?: {\r\n accessToken: string;\r\n refreshToken?: string | null;\r\n };\r\n}> {\r\n const tokenRepository = getLibraries().getAuthTokenRepository();\r\n\r\n const storedToken = await tokenRepository.findRefreshToken(refreshToken);\r\n\r\n if (!storedToken) {\r\n return {\r\n success: false,\r\n tokenStatus: 'invalid'\r\n };\r\n }\r\n\r\n const isRevoked = storedToken.isRevoked;\r\n if (isRevoked) {\r\n return {\r\n success: false,\r\n tokenStatus: 'revoked'\r\n };\r\n }\r\n\r\n const isExpired = storedToken.isExpired();\r\n\r\n const entityData = {\r\n id: storedToken.entityId,\r\n type: storedToken.entityType,\r\n parameters: storedToken.metadata || {}\r\n };\r\n\r\n if (isExpired) {\r\n const newTokens = await signTokenPair({\r\n id: storedToken.entityId,\r\n type: storedToken.entityType,\r\n parameters: storedToken.metadata || {}\r\n });\r\n\r\n await tokenRepository.revokeRefreshToken(refreshToken);\r\n\r\n return {\r\n success: true,\r\n entity: entityData,\r\n tokenStatus: 'expired',\r\n newTokens: {\r\n accessToken: newTokens.accessToken,\r\n refreshToken: newTokens.refreshToken\r\n }\r\n };\r\n }\r\n\r\n const newAccessToken = await signAccessToken({\r\n id: storedToken.entityId,\r\n type: storedToken.entityType,\r\n parameters: storedToken.metadata || {}\r\n });\r\n\r\n return {\r\n success: true,\r\n entity: entityData,\r\n tokenStatus: 'valid',\r\n newTokens: {\r\n accessToken: newAccessToken,\r\n refreshToken: null\r\n }\r\n };\r\n}\r\n\r\nexport const RefreshTokenModel = createGlobalModel(RefreshToken);\r\n\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/auth/index.ts"],"names":[],"mappings":"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","sourcesContent":["import jwt, { SignOptions, JwtPayload } from \"jsonwebtoken\";\r\nimport { EntityContext } from \"../trpc/context\";\r\nimport { randomBytes } from \"crypto\";\r\nimport {RefreshToken} from \"./refreshtoken\";\r\nimport {getLibraries} from \"../../index\";\r\nimport { createGlobalModel } from \"../mongo\";\r\n\r\nexport enum AuthEntityType {\r\n USER = \"USER\",\r\n SELLER = \"SELLER\",\r\n DELIVERY_BOY = \"DELIVERY_BOY\",\r\n CRM = \"CRM\"\r\n}\r\n\r\nexport enum TokenType {\r\n ACCESS = \"ACCESS\",\r\n REFRESH = \"REFRESH\"\r\n}\r\n\r\nexport interface RefreshTokenRecord {\r\n token: string;\r\n entityId: string;\r\n entityType: AuthEntityType;\r\n expiresAt: Date;\r\n isRevoked: boolean;\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\n/**\r\n * Sign a JWT access token for the given entity (id + type).\r\n * It will fetch the secret for that entity type and create a token.\r\n */\r\nexport async function signAccessToken(\r\n entity: { id: string; type: AuthEntityType, parameters: Record<string, unknown> },\r\n options?: SignOptions\r\n): Promise<string> {\r\n if (!entity?.type) {\r\n throw new Error('Entity type is required to sign token');\r\n }\r\n\r\n const secret = await getLibraries()\r\n .getSecretsService()\r\n .getKey(`${entity.type.toUpperCase()}_JWT_TOKEN`);\r\n\r\n if (!secret) {\r\n throw new Error(`No secret found for entity type ${entity.type}`);\r\n }\r\n\r\n const payload = {\r\n id: entity.id,\r\n type: entity.type,\r\n parameters: entity.parameters,\r\n tokenType: TokenType.ACCESS\r\n };\r\n\r\n const tokenOptions: SignOptions = {\r\n ...options,\r\n expiresIn: options?.expiresIn || '1d'\r\n };\r\n\r\n return jwt.sign(payload, secret, tokenOptions);\r\n}\r\n\r\n/**\r\n * Generate a refresh token for the given entity\r\n */\r\nexport async function generateRefreshToken(\r\n entity: { id: string; type: AuthEntityType, parameters?: Record<string, unknown> },\r\n options?: { expiresIn?: string | number }\r\n): Promise<string> {\r\n const tokenValue = randomBytes(40).toString('hex');\r\n\r\n const expiresIn = options?.expiresIn || '7d';\r\n const expiresAt = new Date();\r\n\r\n if (typeof expiresIn === 'string') {\r\n // Parse duration strings like '7d', '30d', etc.\r\n const match = expiresIn.match(/^(\\d+)([smhdwy])$/);\r\n if (match) {\r\n const value = parseInt(match[1]);\r\n const unit = match[2];\r\n\r\n switch (unit) {\r\n case 's': expiresAt.setSeconds(expiresAt.getSeconds() + value); break;\r\n case 'm': expiresAt.setMinutes(expiresAt.getMinutes() + value); break;\r\n case 'h': expiresAt.setHours(expiresAt.getHours() + value); break;\r\n case 'd': expiresAt.setDate(expiresAt.getDate() + value); break;\r\n case 'w': expiresAt.setDate(expiresAt.getDate() + (value * 7)); break;\r\n case 'y': expiresAt.setFullYear(expiresAt.getFullYear() + value); break;\r\n }\r\n } else {\r\n // Default to 7 days if format is invalid\r\n expiresAt.setDate(expiresAt.getDate() + 7);\r\n }\r\n } else if (typeof expiresIn === 'number') {\r\n // Interpret number as seconds\r\n expiresAt.setSeconds(expiresAt.getSeconds() + expiresIn);\r\n }\r\n\r\n await storeRefreshToken({\r\n token: tokenValue,\r\n entityId: entity.id,\r\n entityType: entity.type,\r\n expiresAt,\r\n isRevoked: false,\r\n metadata: entity.parameters\r\n });\r\n\r\n return tokenValue;\r\n}\r\n\r\n/**\r\n * Store a refresh token in the database\r\n */\r\nasync function storeRefreshToken(tokenRecord: RefreshTokenRecord): Promise<void> {\r\n const tokenRepository = getLibraries().getAuthTokenRepository();\r\n await tokenRepository.saveRefreshToken(tokenRecord);\r\n}\r\n\r\n/**\r\n * Verify an access token for the given entity types\r\n */\r\nexport async function verifyAccessToken(entityTypes: AuthEntityType[], token: string): Promise<EntityContext | undefined> {\r\n for(const entityType of entityTypes) {\r\n const secret = await getLibraries().getSecretsService().getKey(entityType.toUpperCase() + \"_JWT_TOKEN\");\r\n\r\n try {\r\n const decoded = jwt.verify(token, secret!) as EntityContext & { tokenType?: TokenType };\r\n\r\n // Verify this is an access token\r\n if (decoded.tokenType !== TokenType.ACCESS) {\r\n continue;\r\n }\r\n\r\n return decoded;\r\n } catch(err) {\r\n // Continue to the next entity type\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Validate a refresh token and return the associated entity\r\n */\r\nexport async function validateRefreshToken(token: string): Promise<{\r\n valid: boolean;\r\n entity?: { id: string; type: AuthEntityType; parameters?: Record<string, unknown> };\r\n}> {\r\n const tokenRepository = getLibraries().getAuthTokenRepository();\r\n const storedToken = await tokenRepository.findRefreshToken(token);\r\n\r\n if (!storedToken) {\r\n return { valid: false };\r\n }\r\n\r\n if (storedToken.expiresAt && new Date() > storedToken.expiresAt) {\r\n return { valid: false };\r\n }\r\n\r\n if (storedToken.isRevoked) {\r\n return { valid: false };\r\n }\r\n\r\n return {\r\n valid: true,\r\n entity: {\r\n id: storedToken.entityId,\r\n type: storedToken.entityType,\r\n parameters: storedToken.metadata\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Refresh authentication tokens\r\n * Returns new access and refresh tokens\r\n */\r\nexport async function refreshTokens(refreshToken: string): Promise<{\r\n accessToken: string;\r\n refreshToken: string;\r\n entity: { id: string; type: AuthEntityType };\r\n} | null> {\r\n // Validate the refresh token\r\n const validation = await validateRefreshToken(refreshToken);\r\n\r\n if (!validation.valid || !validation.entity) {\r\n return null;\r\n }\r\n\r\n await revokeRefreshToken(refreshToken);\r\n\r\n // Create new tokens\r\n const entity = validation.entity;\r\n const newAccessToken = await signAccessToken({\r\n id: entity.id,\r\n type: entity.type,\r\n parameters: entity.parameters || {}\r\n });\r\n\r\n const newRefreshToken = await generateRefreshToken({\r\n id: entity.id,\r\n type: entity.type,\r\n parameters: entity.parameters\r\n });\r\n\r\n return {\r\n accessToken: newAccessToken,\r\n refreshToken: newRefreshToken,\r\n entity: {\r\n id: entity.id,\r\n type: entity.type\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Revoke a refresh token\r\n */\r\nexport async function revokeRefreshToken(token: string): Promise<boolean> {\r\n const tokenRepository = getLibraries().getAuthTokenRepository();\r\n return tokenRepository.revokeRefreshToken(token);\r\n}\r\n\r\n/**\r\n * Revoke all refresh tokens for a specific entity\r\n */\r\nexport async function revokeAllRefreshTokens(entityId: string, entityType: AuthEntityType): Promise<boolean> {\r\n const tokenRepository = getLibraries().getAuthTokenRepository();\r\n return tokenRepository.revokeAllRefreshTokensForEntity(entityId, entityType);\r\n}\r\n\r\n/**\r\n * Sign both access and refresh tokens - utility for initial login/authentication\r\n */\r\nexport async function signTokenPair(\r\n entity: { id: string; type: AuthEntityType; parameters?: Record<string, unknown> },\r\n options?: { accessTokenOptions?: SignOptions; refreshTokenExpiresIn?: string | number }\r\n): Promise<{\r\n accessToken: string;\r\n refreshToken: string;\r\n}> {\r\n const accessToken = await signAccessToken({\r\n id: entity.id,\r\n type: entity.type,\r\n parameters: entity.parameters || {}\r\n }, options?.accessTokenOptions);\r\n\r\n const refreshToken = await generateRefreshToken({\r\n id: entity.id,\r\n type: entity.type,\r\n parameters: entity.parameters\r\n }, { expiresIn: options?.refreshTokenExpiresIn });\r\n\r\n return {\r\n accessToken,\r\n refreshToken\r\n };\r\n}\r\n\r\n/**\r\n * Handle the refresh token validation and renewal logic\r\n * @param refreshToken The refresh token to validate or renew\r\n * @returns Result object with token status and renewal information\r\n */\r\nexport async function handleTokenRenewal(\r\n refreshToken: string,\r\n): Promise<{\r\n success: boolean;\r\n entity?: {\r\n id: string;\r\n type: AuthEntityType;\r\n parameters: Record<string, unknown>;\r\n };\r\n tokenStatus: 'valid' | 'expired' | 'revoked' | 'invalid';\r\n newTokens?: {\r\n accessToken: string;\r\n refreshToken?: string | null;\r\n };\r\n}> {\r\n const tokenRepository = getLibraries().getAuthTokenRepository();\r\n\r\n const storedToken = await tokenRepository.findRefreshToken(refreshToken);\r\n\r\n if (!storedToken) {\r\n return {\r\n success: false,\r\n tokenStatus: 'invalid'\r\n };\r\n }\r\n\r\n const isRevoked = storedToken.isRevoked;\r\n if (isRevoked) {\r\n return {\r\n success: false,\r\n tokenStatus: 'revoked'\r\n };\r\n }\r\n\r\n const isExpired = storedToken.isExpired();\r\n\r\n const entityData = {\r\n id: storedToken.entityId,\r\n type: storedToken.entityType,\r\n parameters: storedToken.metadata || {}\r\n };\r\n\r\n if (isExpired) {\r\n const newTokens = await signTokenPair({\r\n id: storedToken.entityId,\r\n type: storedToken.entityType,\r\n parameters: storedToken.metadata || {}\r\n });\r\n\r\n await tokenRepository.revokeRefreshToken(refreshToken);\r\n\r\n return {\r\n success: true,\r\n entity: entityData,\r\n tokenStatus: 'expired',\r\n newTokens: {\r\n accessToken: newTokens.accessToken,\r\n refreshToken: newTokens.refreshToken\r\n }\r\n };\r\n }\r\n\r\n const newAccessToken = await signAccessToken({\r\n id: storedToken.entityId,\r\n type: storedToken.entityType,\r\n parameters: storedToken.metadata || {}\r\n });\r\n\r\n return {\r\n success: true,\r\n entity: entityData,\r\n tokenStatus: 'valid',\r\n newTokens: {\r\n accessToken: newAccessToken,\r\n refreshToken: null\r\n }\r\n };\r\n}\r\n\r\nexport const RefreshTokenModel = createGlobalModel(RefreshToken);\r\n\r\n"]}
@@ -89,7 +89,6 @@ exports.RefreshToken = RefreshToken = RefreshToken_1 = __decorate([
89
89
  allowMixed: typegoose_1.Severity.ALLOW
90
90
  }
91
91
  }),
92
- (0, typegoose_1.index)({ token: 1 }, { unique: true }),
93
92
  (0, typegoose_1.index)({ entityId: 1, entityType: 1 }),
94
93
  (0, typegoose_1.index)({ isRevoked: 1 })
95
94
  ], RefreshToken);
@@ -1 +1 @@
1
- {"version":3,"file":"refreshtoken.js","sourceRoot":"/","sources":["libraries/auth/refreshtoken.ts"],"names":[],"mappings":"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","sourcesContent":["import { prop, getModelForClass, modelOptions, index, Severity, DocumentType, ReturnModelType } from '@typegoose/typegoose';\r\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\r\nimport { getLibraries } from '../../index';\r\nimport {AuthEntityType, RefreshTokenModel} from \"./index\";\r\n\r\n@modelOptions({\r\n schemaOptions: {\r\n collection: 'refresh_tokens',\r\n autoCreate: true,\r\n toJSON: { virtuals: true },\r\n toObject: { virtuals: true }\r\n },\r\n options: {\r\n allowMixed: Severity.ALLOW // Allow mixed types for metadata\r\n }\r\n})\r\n@index({ token: 1 }, { unique: true })\r\n@index({ entityId: 1, entityType: 1 })\r\n@index({ isRevoked: 1 })\r\nexport class RefreshToken extends TimeStamps {\r\n @prop({ required: true, type: () => String, unique: true })\r\n public token!: string;\r\n\r\n @prop({ required: true, type: () => String })\r\n public entityId!: string;\r\n\r\n @prop({\r\n required: true,\r\n type: () => String,\r\n enum: AuthEntityType\r\n })\r\n public entityType!: AuthEntityType;\r\n\r\n @prop({ required: false, type: () => Date })\r\n public expiresAt?: Date | null;\r\n\r\n @prop({ required: true, type: () => Boolean, default: false })\r\n public isRevoked!: boolean;\r\n\r\n @prop({ required: false, type: () => Object })\r\n public metadata?: Record<string, unknown>;\r\n\r\n /**\r\n * Static method to find a valid token\r\n */\r\n public static async findValidToken(\r\n this: ReturnModelType<typeof RefreshToken>,\r\n token: string\r\n ): Promise<DocumentType<RefreshToken> | null> {\r\n const query: any = { token, isRevoked: false };\r\n\r\n // Only check expiration if token has an expiration date\r\n query.$or = [\r\n { expiresAt: { $exists: false } },\r\n { expiresAt: null },\r\n { expiresAt: { $gt: new Date() } }\r\n ];\r\n\r\n return this.findOne(query);\r\n }\r\n\r\n /**\r\n * Static method to revoke all tokens for an entity\r\n */\r\n public static async revokeAllForEntity(\r\n this: ReturnModelType<typeof RefreshToken>,\r\n entityId: string,\r\n entityType: AuthEntityType\r\n ): Promise<number> {\r\n const result = await this.updateMany(\r\n { entityId, entityType, isRevoked: false },\r\n { isRevoked: true }\r\n );\r\n\r\n return result.modifiedCount;\r\n }\r\n\r\n /**\r\n * Check if this token is expired\r\n */\r\n public isExpired(): boolean {\r\n if (!this.expiresAt) return false;\r\n return new Date() > this.expiresAt;\r\n }\r\n\r\n /**\r\n * Static method to clean up old expired tokens\r\n * Call this periodically to keep your database clean\r\n */\r\n public static async cleanupExpiredTokens(\r\n this: ReturnModelType<typeof RefreshToken>,\r\n olderThan?: Date\r\n ): Promise<number> {\r\n const cutoffDate = olderThan || new Date();\r\n\r\n const result = await this.deleteMany({\r\n expiresAt: { $ne: null, $lt: cutoffDate },\r\n isRevoked: true // Only delete tokens that are both expired and already revoked\r\n });\r\n\r\n return result.deletedCount;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"refreshtoken.js","sourceRoot":"/","sources":["libraries/auth/refreshtoken.ts"],"names":[],"mappings":"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","sourcesContent":["import { prop, getModelForClass, modelOptions, index, Severity, DocumentType, ReturnModelType } from '@typegoose/typegoose';\r\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\r\nimport { getLibraries } from '../../index';\r\nimport {AuthEntityType, RefreshTokenModel} from \"./index\";\r\n\r\n@modelOptions({\r\n schemaOptions: {\r\n collection: 'refresh_tokens',\r\n autoCreate: true,\r\n toJSON: { virtuals: true },\r\n toObject: { virtuals: true }\r\n },\r\n options: {\r\n allowMixed: Severity.ALLOW // Allow mixed types for metadata\r\n }\r\n})\r\n@index({ entityId: 1, entityType: 1 })\r\n@index({ isRevoked: 1 })\r\nexport class RefreshToken extends TimeStamps {\r\n @prop({ required: true, type: () => String, unique: true })\r\n public token!: string;\r\n\r\n @prop({ required: true, type: () => String })\r\n public entityId!: string;\r\n\r\n @prop({\r\n required: true,\r\n type: () => String,\r\n enum: AuthEntityType\r\n })\r\n public entityType!: AuthEntityType;\r\n\r\n @prop({ required: false, type: () => Date })\r\n public expiresAt?: Date | null;\r\n\r\n @prop({ required: true, type: () => Boolean, default: false })\r\n public isRevoked!: boolean;\r\n\r\n @prop({ required: false, type: () => Object })\r\n public metadata?: Record<string, unknown>;\r\n\r\n /**\r\n * Static method to find a valid token\r\n */\r\n public static async findValidToken(\r\n this: ReturnModelType<typeof RefreshToken>,\r\n token: string\r\n ): Promise<DocumentType<RefreshToken> | null> {\r\n const query: any = { token, isRevoked: false };\r\n\r\n // Only check expiration if token has an expiration date\r\n query.$or = [\r\n { expiresAt: { $exists: false } },\r\n { expiresAt: null },\r\n { expiresAt: { $gt: new Date() } }\r\n ];\r\n\r\n return this.findOne(query);\r\n }\r\n\r\n /**\r\n * Static method to revoke all tokens for an entity\r\n */\r\n public static async revokeAllForEntity(\r\n this: ReturnModelType<typeof RefreshToken>,\r\n entityId: string,\r\n entityType: AuthEntityType\r\n ): Promise<number> {\r\n const result = await this.updateMany(\r\n { entityId, entityType, isRevoked: false },\r\n { isRevoked: true }\r\n );\r\n\r\n return result.modifiedCount;\r\n }\r\n\r\n /**\r\n * Check if this token is expired\r\n */\r\n public isExpired(): boolean {\r\n if (!this.expiresAt) return false;\r\n return new Date() > this.expiresAt;\r\n }\r\n\r\n /**\r\n * Static method to clean up old expired tokens\r\n * Call this periodically to keep your database clean\r\n */\r\n public static async cleanupExpiredTokens(\r\n this: ReturnModelType<typeof RefreshToken>,\r\n olderThan?: Date\r\n ): Promise<number> {\r\n const cutoffDate = olderThan || new Date();\r\n\r\n const result = await this.deleteMany({\r\n expiresAt: { $ne: null, $lt: cutoffDate },\r\n isRevoked: true // Only delete tokens that are both expired and already revoked\r\n });\r\n\r\n return result.deletedCount;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/event/index.ts"],"names":[],"mappings":";;;;;AAQA,oCAOC;AAED,oCAYC;AAED,4CAmCC;AAlED,sDAA2B;AAG3B,IAAI,UAA2B,CAAC;AAChC,IAAI,OAAqB,CAAC;AAE1B,MAAM,aAAa,GAAG,aAAa,CAAC;AAE7B,KAAK,UAAU,YAAY,CAAC,SAAiB;IAChD,UAAU,GAAG,MAAM,iBAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3C,OAAO,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,CAAC;IAE3C,MAAM,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAC9D,CAAC;AAEM,KAAK,UAAU,YAAY,CAC9B,KAA0B;IAE1B,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAEnF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEjE,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE;QACzD,WAAW,EAAE,kBAAkB;KAClC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,OAAO,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAClF,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAClC,OAAe,EACf,SAA0C;IAE1C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAEnF,MAAM,SAAS,GAAG,GAAG,OAAO,QAAQ,CAAC;IAErC,MAAM,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE;QACjC,OAAO,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAE3D,MAAM,OAAO,CAAC,OAAO,CACjB,SAAS,EACT,KAAK,EAAE,GAAG,EAAE,EAAE;QACV,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAE1C,IAAI,CAAC;gBACD,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;gBAEzB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,yBAAyB,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;YAE5D,CAAC;QACL,CAAC;IACL,CAAC,EACD,EAAC,KAAK,EAAE,KAAK,EAAC,CACjB,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,eAAe,SAAS,GAAG,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import amqp from \"amqplib\";\r\nimport { BaseEvent } from \"./BaseEvent\";\r\n\r\nlet connection: amqp.Connection;\r\nlet channel: amqp.Channel;\r\n\r\nconst EXCHANGE_NAME = \"lyxa.events\";\r\n\r\nexport async function initEventBus(rabbitUrl: string) {\r\n connection = await amqp.connect(rabbitUrl);\r\n channel = await connection.createChannel();\r\n\r\n await channel.assertExchange(EXCHANGE_NAME, \"topic\", { durable: true });\r\n\r\n console.log(\"EventBus initialized and exchange asserted\");\r\n}\r\n\r\nexport async function publishEvent<TPayload extends Record<string, unknown>>(\r\n event: BaseEvent<TPayload>\r\n): Promise<void> {\r\n if (!channel) throw new Error(\"Channel not initialized. Call initEventBus first.\");\r\n\r\n const messageBuffer = Buffer.from(JSON.stringify(event.payload));\r\n\r\n channel.publish(EXCHANGE_NAME, event.eventId, messageBuffer, {\r\n contentType: \"application/json\",\r\n });\r\n\r\n console.log(`Published event [${event.eventId}] with payload`, event.payload);\r\n}\r\n\r\nexport async function subscribeToEvent(\r\n eventId: string,\r\n onMessage: (payload: any) => Promise<void>\r\n): Promise<void> {\r\n if (!channel) throw new Error(\"Channel not initialized. Call initEventBus first.\");\r\n\r\n const queueName = `${eventId}-queue`;\r\n\r\n await channel.assertQueue(queueName, {\r\n durable: true,\r\n });\r\n\r\n await channel.bindQueue(queueName, EXCHANGE_NAME, eventId);\r\n\r\n await channel.consume(\r\n queueName,\r\n async (msg) => {\r\n if (msg !== null) {\r\n const payloadString = msg.content.toString();\r\n const payload = JSON.parse(payloadString);\r\n\r\n try {\r\n await onMessage(payload);\r\n // Acknowledge the message as processed\r\n channel.ack(msg);\r\n } catch (err) {\r\n console.error(`Error handling event [${eventId}]`, err);\r\n // Optional: channel.nack(msg) for requeue\r\n }\r\n }\r\n },\r\n {noAck: false}\r\n );\r\n\r\n console.log(`Subscribed to event [${eventId}] on queue [${queueName}]`);\r\n}\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/event/index.ts"],"names":[],"mappings":";;;;;AAQA,oCAOC;AAED,oCAYC;AAED,4CAmCC;AAlED,sDAA2B;AAG3B,IAAI,UAA6B,CAAC;AAClC,IAAI,OAAqB,CAAC;AAE1B,MAAM,aAAa,GAAG,aAAa,CAAC;AAE7B,KAAK,UAAU,YAAY,CAAC,SAAiB;IAChD,UAAU,GAAG,MAAM,iBAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3C,OAAO,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,CAAC;IAE3C,MAAM,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAC9D,CAAC;AAEM,KAAK,UAAU,YAAY,CAC9B,KAA0B;IAE1B,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAEnF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEjE,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE;QACzD,WAAW,EAAE,kBAAkB;KAClC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,OAAO,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAClF,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAClC,OAAe,EACf,SAA0C;IAE1C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAEnF,MAAM,SAAS,GAAG,GAAG,OAAO,QAAQ,CAAC;IAErC,MAAM,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE;QACjC,OAAO,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAE3D,MAAM,OAAO,CAAC,OAAO,CACjB,SAAS,EACT,KAAK,EAAE,GAAG,EAAE,EAAE;QACV,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAE1C,IAAI,CAAC;gBACD,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;gBAEzB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,yBAAyB,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;YAE5D,CAAC;QACL,CAAC;IACL,CAAC,EACD,EAAC,KAAK,EAAE,KAAK,EAAC,CACjB,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,eAAe,SAAS,GAAG,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import amqp from \"amqplib\";\r\nimport { BaseEvent } from \"./BaseEvent\";\r\n\r\nlet connection: amqp.ChannelModel;\r\nlet channel: amqp.Channel;\r\n\r\nconst EXCHANGE_NAME = \"lyxa.events\";\r\n\r\nexport async function initEventBus(rabbitUrl: string) {\r\n connection = await amqp.connect(rabbitUrl);\r\n channel = await connection.createChannel();\r\n\r\n await channel.assertExchange(EXCHANGE_NAME, \"topic\", { durable: true });\r\n\r\n console.log(\"EventBus initialized and exchange asserted\");\r\n}\r\n\r\nexport async function publishEvent<TPayload extends Record<string, unknown>>(\r\n event: BaseEvent<TPayload>\r\n): Promise<void> {\r\n if (!channel) throw new Error(\"Channel not initialized. Call initEventBus first.\");\r\n\r\n const messageBuffer = Buffer.from(JSON.stringify(event.payload));\r\n\r\n channel.publish(EXCHANGE_NAME, event.eventId, messageBuffer, {\r\n contentType: \"application/json\",\r\n });\r\n\r\n console.log(`Published event [${event.eventId}] with payload`, event.payload);\r\n}\r\n\r\nexport async function subscribeToEvent(\r\n eventId: string,\r\n onMessage: (payload: any) => Promise<void>\r\n): Promise<void> {\r\n if (!channel) throw new Error(\"Channel not initialized. Call initEventBus first.\");\r\n\r\n const queueName = `${eventId}-queue`;\r\n\r\n await channel.assertQueue(queueName, {\r\n durable: true,\r\n });\r\n\r\n await channel.bindQueue(queueName, EXCHANGE_NAME, eventId);\r\n\r\n await channel.consume(\r\n queueName,\r\n async (msg) => {\r\n if (msg !== null) {\r\n const payloadString = msg.content.toString();\r\n const payload = JSON.parse(payloadString);\r\n\r\n try {\r\n await onMessage(payload);\r\n // Acknowledge the message as processed\r\n channel.ack(msg);\r\n } catch (err) {\r\n console.error(`Error handling event [${eventId}]`, err);\r\n // Optional: channel.nack(msg) for requeue\r\n }\r\n }\r\n },\r\n {noAck: false}\r\n );\r\n\r\n console.log(`Subscribed to event [${eventId}] on queue [${queueName}]`);\r\n}\r\n"]}
@@ -2,5 +2,5 @@ import { Connection } from 'mongoose';
2
2
  import { ReturnModelType } from '@typegoose/typegoose';
3
3
  import { AnyParamConstructor, IModelOptions } from "@typegoose/typegoose/lib/types";
4
4
  export declare function initGlobalConnection(uri: string, environment: string): Promise<Connection>;
5
- export declare function createGlobalModel<T extends AnyParamConstructor<any>>(Class: T): ReturnModelType<T>;
5
+ export declare function createGlobalModel<T extends AnyParamConstructor<any>>(Class: T, options?: IModelOptions): ReturnModelType<T>;
6
6
  export declare function createGlobalDiscriminatorModel<Base extends AnyParamConstructor<any>, Sub extends AnyParamConstructor<any>>(baseModel: ReturnModelType<Base>, subClass: Sub, discriminatorName?: string, options?: IModelOptions): ReturnModelType<Sub>;
@@ -8,19 +8,48 @@ const typegoose_1 = require("@typegoose/typegoose");
8
8
  const soft_delete_plugin_1 = require("./plugins/soft-delete-plugin");
9
9
  (0, soft_delete_plugin_1.applySoftDeletePlugin)();
10
10
  let globalConnection;
11
+ let pendingModels = [];
12
+ let isConnectionInitialized = false;
11
13
  async function initGlobalConnection(uri, environment) {
12
14
  if (!globalConnection) {
13
15
  globalConnection = (0, mongoose_1.createConnection)(uri, {
14
16
  dbName: `lyxa-${environment}-global`,
15
17
  });
18
+ isConnectionInitialized = true;
19
+ for (const { Class, options, callback } of pendingModels) {
20
+ const model = (0, typegoose_1.getModelForClass)(Class, {
21
+ existingConnection: globalConnection,
22
+ ...options
23
+ });
24
+ callback(model);
25
+ }
26
+ pendingModels = [];
16
27
  }
17
28
  return globalConnection;
18
29
  }
19
- function createGlobalModel(Class) {
20
- if (!globalConnection) {
21
- throw new Error('Global connection not initialized. Call initGlobalConnection(...) first.');
30
+ function createGlobalModel(Class, options) {
31
+ if (globalConnection && isConnectionInitialized) {
32
+ return (0, typegoose_1.getModelForClass)(Class, { existingConnection: globalConnection, ...options });
33
+ }
34
+ else {
35
+ let modelInstance = null;
36
+ const modelProxy = new Proxy({}, {
37
+ get: function (target, prop) {
38
+ if (!modelInstance) {
39
+ throw new Error('Model not initialized yet. Database connection pending.');
40
+ }
41
+ return modelInstance[prop];
42
+ }
43
+ });
44
+ pendingModels.push({
45
+ Class,
46
+ options,
47
+ callback: (model) => {
48
+ modelInstance = model;
49
+ }
50
+ });
51
+ return modelProxy;
22
52
  }
23
- return (0, typegoose_1.getModelForClass)(Class, { existingConnection: globalConnection });
24
53
  }
25
54
  function createGlobalDiscriminatorModel(baseModel, subClass, discriminatorName, options) {
26
55
  if (!globalConnection) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/mongo/index.ts"],"names":[],"mappings":";;AAUA,oDAOC;AAKD,8CASC;AAWD,wEAmBC;AA7DD,uCAAwD;AACxD,oDAAsG;AAGtG,qEAAqE;AAGrE,IAAA,0CAAqB,GAAE,CAAC;AACxB,IAAI,gBAAwC,CAAC;AAEtC,KAAK,UAAU,oBAAoB,CAAC,GAAW,EAAE,WAAmB;IACvE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,gBAAgB,GAAG,IAAA,2BAAgB,EAAC,GAAG,EAAE;YACrC,MAAM,EAAE,QAAQ,WAAW,SAAS;SACvC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC5B,CAAC;AAKD,SAAgB,iBAAiB,CAC7B,KAAQ;IAER,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACX,0EAA0E,CAC7E,CAAC;IACN,CAAC;IACD,OAAO,IAAA,4BAAgB,EAAC,KAAK,EAAE,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC7E,CAAC;AAWD,SAAgB,8BAA8B,CAI1C,SAAgC,EAChC,QAAa,EACb,iBAA0B,EAC1B,OAAuB;IAEvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACX,0EAA0E,CAC7E,CAAC;IACN,CAAC;IAED,OAAO,IAAA,yCAA6B,EAAC,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE;QACzE,kBAAkB,EAAE,gBAAgB;QACpC,GAAG,OAAO;KACb,CAAC,CAAC;AACP,CAAC","sourcesContent":["import { Connection, createConnection } from 'mongoose';\r\nimport {getDiscriminatorModelForClass, getModelForClass, ReturnModelType} from '@typegoose/typegoose';\r\nimport {AnyParamConstructor, IModelOptions} from \"@typegoose/typegoose/lib/types\";\r\n\r\nimport { applySoftDeletePlugin } from './plugins/soft-delete-plugin';\r\n\r\n// Apply the soft delete plugin globally before any connections or models\r\napplySoftDeletePlugin();\r\nlet globalConnection: Connection | undefined;\r\n\r\nexport async function initGlobalConnection(uri: string, environment: string) {\r\n if (!globalConnection) {\r\n globalConnection = createConnection(uri, {\r\n dbName: `lyxa-${environment}-global`,\r\n });\r\n }\r\n return globalConnection;\r\n}\r\n\r\n/**\r\n * Creates a Typegoose model from a class (with a single, global connection).\r\n */\r\nexport function createGlobalModel<T extends AnyParamConstructor<any>>(\r\n Class: T\r\n): ReturnModelType<T> {\r\n if (!globalConnection) {\r\n throw new Error(\r\n 'Global connection not initialized. Call initGlobalConnection(...) first.'\r\n );\r\n }\r\n return getModelForClass(Class, { existingConnection: globalConnection });\r\n}\r\n\r\n/**\r\n * Creates a Typegoose *discriminator* model from a base model,\r\n * using a derived sub-class & optional discriminator value.\r\n *\r\n * @param baseModel The ReturnModelType (model) for the base class\r\n * @param subClass The derived class constructor\r\n * @param discriminatorName A string to label this sub-class (e.g. \"DOG\")\r\n * @param options Additional model options\r\n */\r\nexport function createGlobalDiscriminatorModel<\r\n Base extends AnyParamConstructor<any>,\r\n Sub extends AnyParamConstructor<any>,\r\n>(\r\n baseModel: ReturnModelType<Base>,\r\n subClass: Sub,\r\n discriminatorName?: string,\r\n options?: IModelOptions,\r\n): ReturnModelType<Sub> {\r\n if (!globalConnection) {\r\n throw new Error(\r\n 'Global connection not initialized. Call initGlobalConnection(...) first.',\r\n );\r\n }\r\n\r\n return getDiscriminatorModelForClass(baseModel, subClass, discriminatorName, {\r\n existingConnection: globalConnection,\r\n ...options,\r\n });\r\n}\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/mongo/index.ts"],"names":[],"mappings":";;AAkBA,oDAoBC;AAOD,8CA+BC;AAWD,wEAmBC;AA1GD,uCAAwD;AACxD,oDAAsG;AAGtG,qEAAqE;AAGrE,IAAA,0CAAqB,GAAE,CAAC;AACxB,IAAI,gBAAwC,CAAC;AAG7C,IAAI,aAAa,GAIZ,EAAE,CAAC;AACR,IAAI,uBAAuB,GAAG,KAAK,CAAC;AAE7B,KAAK,UAAU,oBAAoB,CAAC,GAAW,EAAE,WAAmB;IACvE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,gBAAgB,GAAG,IAAA,2BAAgB,EAAC,GAAG,EAAE;YACrC,MAAM,EAAE,QAAQ,WAAW,SAAS;SACvC,CAAC,CAAC;QAGH,uBAAuB,GAAG,IAAI,CAAC;QAG/B,KAAK,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,aAAa,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,IAAA,4BAAgB,EAAC,KAAK,EAAE;gBAClC,kBAAkB,EAAE,gBAAgB;gBACpC,GAAG,OAAO;aACb,CAAC,CAAC;YACH,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QACD,aAAa,GAAG,EAAE,CAAC;IACvB,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC5B,CAAC;AAOD,SAAgB,iBAAiB,CAC7B,KAAQ,EACR,OAAuB;IAEvB,IAAI,gBAAgB,IAAI,uBAAuB,EAAE,CAAC;QAE9C,OAAO,IAAA,4BAAgB,EAAC,KAAK,EAAE,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;SAAM,CAAC;QAEJ,IAAI,aAAa,GAAQ,IAAI,CAAC;QAE9B,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE;YAC7B,GAAG,EAAE,UAAS,MAAM,EAAE,IAAI;gBACtB,IAAI,CAAC,aAAa,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;gBAC/E,CAAC;gBACD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;SACJ,CAAuB,CAAC;QAGzB,aAAa,CAAC,IAAI,CAAC;YACf,KAAK;YACL,OAAO;YACP,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,aAAa,GAAG,KAAK,CAAC;YAC1B,CAAC;SACJ,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACtB,CAAC;AACL,CAAC;AAWD,SAAgB,8BAA8B,CAI1C,SAAgC,EAChC,QAAa,EACb,iBAA0B,EAC1B,OAAuB;IAEvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACX,0EAA0E,CAC7E,CAAC;IACN,CAAC;IAED,OAAO,IAAA,yCAA6B,EAAC,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE;QACzE,kBAAkB,EAAE,gBAAgB;QACpC,GAAG,OAAO;KACb,CAAC,CAAC;AACP,CAAC","sourcesContent":["import { Connection, createConnection } from 'mongoose';\r\nimport {getDiscriminatorModelForClass, getModelForClass, ReturnModelType} from '@typegoose/typegoose';\r\nimport {AnyParamConstructor, IModelOptions} from \"@typegoose/typegoose/lib/types\";\r\n\r\nimport { applySoftDeletePlugin } from './plugins/soft-delete-plugin';\r\n\r\n// Apply the soft delete plugin globally before any connections or models\r\napplySoftDeletePlugin();\r\nlet globalConnection: Connection | undefined;\r\n\r\n// Track pending models that were requested before connection initialization\r\nlet pendingModels: Array<{\r\n Class: any,\r\n options?: IModelOptions,\r\n callback: (model: any) => void\r\n}> = [];\r\nlet isConnectionInitialized = false;\r\n\r\nexport async function initGlobalConnection(uri: string, environment: string) {\r\n if (!globalConnection) {\r\n globalConnection = createConnection(uri, {\r\n dbName: `lyxa-${environment}-global`,\r\n });\r\n\r\n // Connection is now initialized\r\n isConnectionInitialized = true;\r\n\r\n // Process any pending models\r\n for (const { Class, options, callback } of pendingModels) {\r\n const model = getModelForClass(Class, {\r\n existingConnection: globalConnection,\r\n ...options\r\n });\r\n callback(model);\r\n }\r\n pendingModels = [];\r\n }\r\n return globalConnection;\r\n}\r\n\r\n/**\r\n * Creates a Typegoose model from a class (with a single, global connection).\r\n * If connection is not yet initialized, returns a proxy that will resolve to the model\r\n * once the connection is established.\r\n */\r\nexport function createGlobalModel<T extends AnyParamConstructor<any>>(\r\n Class: T,\r\n options?: IModelOptions\r\n): ReturnModelType<T> {\r\n if (globalConnection && isConnectionInitialized) {\r\n // Normal behavior - create and return the model\r\n return getModelForClass(Class, { existingConnection: globalConnection, ...options });\r\n } else {\r\n // Connection not initialized yet - create a proxy object\r\n let modelInstance: any = null;\r\n\r\n const modelProxy = new Proxy({}, {\r\n get: function(target, prop) {\r\n if (!modelInstance) {\r\n throw new Error('Model not initialized yet. Database connection pending.');\r\n }\r\n return modelInstance[prop];\r\n }\r\n }) as ReturnModelType<T>;\r\n\r\n // Store this request to be processed when connection is initialized\r\n pendingModels.push({\r\n Class,\r\n options,\r\n callback: (model) => {\r\n modelInstance = model;\r\n }\r\n });\r\n\r\n return modelProxy;\r\n }\r\n}\r\n\r\n/**\r\n * Creates a Typegoose *discriminator* model from a base model,\r\n * using a derived sub-class & optional discriminator value.\r\n *\r\n * @param baseModel The ReturnModelType (model) for the base class\r\n * @param subClass The derived class constructor\r\n * @param discriminatorName A string to label this sub-class (e.g. \"DOG\")\r\n * @param options Additional model options\r\n */\r\nexport function createGlobalDiscriminatorModel<\r\n Base extends AnyParamConstructor<any>,\r\n Sub extends AnyParamConstructor<any>,\r\n>(\r\n baseModel: ReturnModelType<Base>,\r\n subClass: Sub,\r\n discriminatorName?: string,\r\n options?: IModelOptions,\r\n): ReturnModelType<Sub> {\r\n if (!globalConnection) {\r\n throw new Error(\r\n 'Global connection not initialized. Call initGlobalConnection(...) first.',\r\n );\r\n }\r\n\r\n return getDiscriminatorModelForClass(baseModel, subClass, discriminatorName, {\r\n existingConnection: globalConnection,\r\n ...options,\r\n });\r\n}\r\n"]}
@@ -0,0 +1,11 @@
1
+ import { ReturnModelType, Ref } from '@typegoose/typegoose';
2
+ import { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';
3
+ import { UpdatedField } from '../../../utilities/enum';
4
+ import { Admin } from './admin.model';
5
+ export declare class ActivityLog extends TimeStamps {
6
+ admin: Ref<Admin>;
7
+ updatedField: UpdatedField;
8
+ oldDocument: any;
9
+ newDocument: any;
10
+ }
11
+ export declare const ActivityLogModel: ReturnModelType<typeof ActivityLog>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ActivityLogModel = exports.ActivityLog = void 0;
13
+ const typegoose_1 = require("@typegoose/typegoose");
14
+ const defaultClasses_1 = require("@typegoose/typegoose/lib/defaultClasses");
15
+ const enum_1 = require("../../../utilities/enum");
16
+ const admin_model_1 = require("./admin.model");
17
+ let ActivityLog = class ActivityLog extends defaultClasses_1.TimeStamps {
18
+ admin;
19
+ updatedField;
20
+ oldDocument;
21
+ newDocument;
22
+ };
23
+ exports.ActivityLog = ActivityLog;
24
+ __decorate([
25
+ (0, typegoose_1.prop)({ required: true, ref: () => admin_model_1.Admin }),
26
+ __metadata("design:type", Object)
27
+ ], ActivityLog.prototype, "admin", void 0);
28
+ __decorate([
29
+ (0, typegoose_1.prop)({ required: true, type: String, enum: enum_1.UpdatedField }),
30
+ __metadata("design:type", String)
31
+ ], ActivityLog.prototype, "updatedField", void 0);
32
+ __decorate([
33
+ (0, typegoose_1.prop)({ required: true, type: typegoose_1.mongoose.Schema.Types.Mixed }),
34
+ __metadata("design:type", Object)
35
+ ], ActivityLog.prototype, "oldDocument", void 0);
36
+ __decorate([
37
+ (0, typegoose_1.prop)({ required: true, type: typegoose_1.mongoose.Schema.Types.Mixed }),
38
+ __metadata("design:type", Object)
39
+ ], ActivityLog.prototype, "newDocument", void 0);
40
+ exports.ActivityLog = ActivityLog = __decorate([
41
+ (0, typegoose_1.modelOptions)({ schemaOptions: { collection: 'activityLogs' } })
42
+ ], ActivityLog);
43
+ exports.ActivityLogModel = (0, typegoose_1.getModelForClass)(ActivityLog);
44
+ //# sourceMappingURL=activity-log.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-log.model.js","sourceRoot":"/","sources":["libraries/mongo/models/activity-log.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA4G;AAC5G,4EAAqE;AACrE,kDAAuD;AACvD,+CAAsC;AAG/B,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,2BAAU;IAEnC,KAAK,CAAc;IAGnB,YAAY,CAAgB;IAG5B,WAAW,CAAO;IAGlB,WAAW,CAAO;CACzB,CAAA;AAZY,kCAAW;AAEhB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,mBAAK,EAAE,CAAC;;0CACjB;AAGnB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAY,EAAE,CAAC;;iDACxB;AAG5B;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,oBAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;;gDACnC;AAGlB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,oBAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;;gDACnC;sBAXb,WAAW;IADvB,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,CAAC;GACnD,WAAW,CAYvB;AAEY,QAAA,gBAAgB,GAAwC,IAAA,4BAAgB,EAAC,WAAW,CAAC,CAAC","sourcesContent":["import { modelOptions, prop, getModelForClass, ReturnModelType, mongoose, Ref } from '@typegoose/typegoose';\r\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\r\nimport { UpdatedField } from '../../../utilities/enum';\r\nimport { Admin } from './admin.model';\r\n\r\n@modelOptions({ schemaOptions: { collection: 'activityLogs' } })\r\nexport class ActivityLog extends TimeStamps {\r\n\t@prop({ required: true, ref: () => Admin })\r\n\tpublic admin!: Ref<Admin>;\r\n\r\n\t@prop({ required: true, type: String, enum: UpdatedField })\r\n\tpublic updatedField!: UpdatedField;\r\n\r\n\t@prop({ required: true, type: mongoose.Schema.Types.Mixed })\r\n\tpublic oldDocument!: any;\r\n\r\n\t@prop({ required: true, type: mongoose.Schema.Types.Mixed })\r\n\tpublic newDocument!: any;\r\n}\r\n\r\nexport const ActivityLogModel: ReturnModelType<typeof ActivityLog> = getModelForClass(ActivityLog);\r\n"]}
@@ -0,0 +1,11 @@
1
+ import { ReturnModelType, Ref } from '@typegoose/typegoose';
2
+ import { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';
3
+ import { AdminRole } from '../../../utilities/enum';
4
+ import { Admin } from './admin.model';
5
+ export declare class AdminAccessControl extends TimeStamps {
6
+ email: string;
7
+ password: string;
8
+ admin: Ref<Admin>;
9
+ role: AdminRole;
10
+ }
11
+ export declare const AdminAccessControlModel: ReturnModelType<typeof AdminAccessControl>;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.AdminAccessControlModel = exports.AdminAccessControl = void 0;
16
+ const typegoose_1 = require("@typegoose/typegoose");
17
+ const defaultClasses_1 = require("@typegoose/typegoose/lib/defaultClasses");
18
+ const bcryptjs_1 = __importDefault(require("bcryptjs"));
19
+ const enum_1 = require("../../../utilities/enum");
20
+ const admin_model_1 = require("./admin.model");
21
+ let AdminAccessControl = class AdminAccessControl extends defaultClasses_1.TimeStamps {
22
+ email;
23
+ password;
24
+ admin;
25
+ role;
26
+ };
27
+ exports.AdminAccessControl = AdminAccessControl;
28
+ __decorate([
29
+ (0, typegoose_1.prop)({ required: true, type: String, unique: true }),
30
+ __metadata("design:type", String)
31
+ ], AdminAccessControl.prototype, "email", void 0);
32
+ __decorate([
33
+ (0, typegoose_1.prop)({ required: true, type: String }),
34
+ __metadata("design:type", String)
35
+ ], AdminAccessControl.prototype, "password", void 0);
36
+ __decorate([
37
+ (0, typegoose_1.prop)({ required: true, ref: () => admin_model_1.Admin }),
38
+ __metadata("design:type", Object)
39
+ ], AdminAccessControl.prototype, "admin", void 0);
40
+ __decorate([
41
+ (0, typegoose_1.prop)({ required: true, type: String, enum: enum_1.AdminRole }),
42
+ __metadata("design:type", String)
43
+ ], AdminAccessControl.prototype, "role", void 0);
44
+ exports.AdminAccessControl = AdminAccessControl = __decorate([
45
+ (0, typegoose_1.pre)('save', async function (next) {
46
+ if (this.isModified('password')) {
47
+ const salt = await bcryptjs_1.default.genSalt(10);
48
+ this.password = await bcryptjs_1.default.hash(this.password, salt);
49
+ }
50
+ next();
51
+ }),
52
+ (0, typegoose_1.modelOptions)({ schemaOptions: { collection: 'adminAccessControls' } })
53
+ ], AdminAccessControl);
54
+ exports.AdminAccessControlModel = (0, typegoose_1.getModelForClass)(AdminAccessControl);
55
+ //# sourceMappingURL=admin-access-control.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-access-control.model.js","sourceRoot":"/","sources":["libraries/mongo/models/admin-access-control.model.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAAuG;AACvG,4EAAqE;AACrE,wDAA8B;AAC9B,kDAAoD;AACpD,+CAAsC;AAU/B,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,2BAAU;IAE1C,KAAK,CAAU;IAGf,QAAQ,CAAU;IAGlB,KAAK,CAAc;IAGnB,IAAI,CAAa;CACxB,CAAA;AAZY,gDAAkB;AAEvB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;iDAC/B;AAGf;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;oDACd;AAGlB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,mBAAK,EAAE,CAAC;;iDACjB;AAGnB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAS,EAAE,CAAC;;gDAChC;6BAXZ,kBAAkB;IAR9B,IAAA,eAAG,EAAqB,MAAM,EAAE,KAAK,WAAW,IAAI;QACpD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,MAAM,kBAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ,GAAG,MAAM,kBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,EAAE,CAAC;IACR,CAAC,CAAC;IACD,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,EAAE,CAAC;GAC1D,kBAAkB,CAY9B;AAEY,QAAA,uBAAuB,GACnC,IAAA,4BAAgB,EAAC,kBAAkB,CAAC,CAAC","sourcesContent":["import { modelOptions, prop, getModelForClass, pre, ReturnModelType, Ref } from '@typegoose/typegoose';\r\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\r\nimport bcrypt from 'bcryptjs';\r\nimport { AdminRole } from '../../../utilities/enum';\r\nimport { Admin } from './admin.model';\r\n\r\n@pre<AdminAccessControl>('save', async function (next) {\r\n\tif (this.isModified('password')) {\r\n\t\tconst salt = await bcrypt.genSalt(10);\r\n\t\tthis.password = await bcrypt.hash(this.password, salt);\r\n\t}\r\n\tnext();\r\n})\r\n@modelOptions({ schemaOptions: { collection: 'adminAccessControls' } })\r\nexport class AdminAccessControl extends TimeStamps {\r\n\t@prop({ required: true, type: String, unique: true })\r\n\tpublic email!: string;\r\n\r\n\t@prop({ required: true, type: String })\r\n\tpublic password!: string;\r\n\r\n\t@prop({ required: true, ref: () => Admin })\r\n\tpublic admin!: Ref<Admin>;\r\n\r\n\t@prop({ required: true, type: String, enum: AdminRole })\r\n\tpublic role!: AdminRole;\r\n}\r\n\r\nexport const AdminAccessControlModel: ReturnModelType<typeof AdminAccessControl> =\r\n\tgetModelForClass(AdminAccessControl);\r\n"]}
@@ -0,0 +1,10 @@
1
+ import { ReturnModelType } from '@typegoose/typegoose';
2
+ import { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';
3
+ export declare class Admin extends TimeStamps {
4
+ name: string;
5
+ profilePhoto?: string;
6
+ phoneNumber: string;
7
+ isPhoneVerified?: boolean;
8
+ status?: string;
9
+ }
10
+ export declare const AdminModel: ReturnModelType<typeof Admin>;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AdminModel = exports.Admin = void 0;
13
+ const typegoose_1 = require("@typegoose/typegoose");
14
+ const defaultClasses_1 = require("@typegoose/typegoose/lib/defaultClasses");
15
+ const enum_1 = require("../../../utilities/enum");
16
+ let Admin = class Admin extends defaultClasses_1.TimeStamps {
17
+ name;
18
+ profilePhoto;
19
+ phoneNumber;
20
+ isPhoneVerified;
21
+ status;
22
+ };
23
+ exports.Admin = Admin;
24
+ __decorate([
25
+ (0, typegoose_1.prop)({ required: true, type: String }),
26
+ __metadata("design:type", String)
27
+ ], Admin.prototype, "name", void 0);
28
+ __decorate([
29
+ (0, typegoose_1.prop)({ type: String }),
30
+ __metadata("design:type", String)
31
+ ], Admin.prototype, "profilePhoto", void 0);
32
+ __decorate([
33
+ (0, typegoose_1.prop)({ required: true, type: String }),
34
+ __metadata("design:type", String)
35
+ ], Admin.prototype, "phoneNumber", void 0);
36
+ __decorate([
37
+ (0, typegoose_1.prop)({ type: Boolean, default: false }),
38
+ __metadata("design:type", Boolean)
39
+ ], Admin.prototype, "isPhoneVerified", void 0);
40
+ __decorate([
41
+ (0, typegoose_1.prop)({ type: String, enum: enum_1.Status, default: enum_1.Status.ACTIVE }),
42
+ __metadata("design:type", String)
43
+ ], Admin.prototype, "status", void 0);
44
+ exports.Admin = Admin = __decorate([
45
+ (0, typegoose_1.modelOptions)({ schemaOptions: { collection: 'admins' } })
46
+ ], Admin);
47
+ exports.AdminModel = (0, typegoose_1.getModelForClass)(Admin);
48
+ //# sourceMappingURL=admin.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.model.js","sourceRoot":"/","sources":["libraries/mongo/models/admin.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA6F;AAC7F,4EAAqE;AACrE,kDAAiD;AAG1C,IAAM,KAAK,GAAX,MAAM,KAAM,SAAQ,2BAAU;IAE7B,IAAI,CAAU;IAGd,YAAY,CAAU;IAGtB,WAAW,CAAU;IAGrB,eAAe,CAAW;IAG1B,MAAM,CAAU;CACvB,CAAA;AAfY,sBAAK;AAEV;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;mCAClB;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;2CACM;AAGtB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;0CACX;AAGrB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;8CACP;AAG1B;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAM,EAAE,OAAO,EAAE,aAAM,CAAC,MAAM,EAAE,CAAC;;qCACtC;gBAdX,KAAK;IADjB,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC;GAC7C,KAAK,CAejB;AAEY,QAAA,UAAU,GAAkC,IAAA,4BAAgB,EAAC,KAAK,CAAC,CAAC","sourcesContent":["import { modelOptions, prop, getModelForClass, ReturnModelType } from '@typegoose/typegoose';\r\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\r\nimport { Status } from '../../../utilities/enum';\r\n\r\n@modelOptions({ schemaOptions: { collection: 'admins' } })\r\nexport class Admin extends TimeStamps {\r\n\t@prop({ required: true, type: String })\r\n\tpublic name!: string;\r\n\r\n\t@prop({ type: String })\r\n\tpublic profilePhoto?: string;\r\n\r\n\t@prop({ required: true, type: String })\r\n\tpublic phoneNumber!: string;\r\n\r\n\t@prop({ type: Boolean, default: false })\r\n\tpublic isPhoneVerified?: boolean;\r\n\r\n\t@prop({ type: String, enum: Status, default: Status.ACTIVE })\r\n\tpublic status?: string;\r\n}\r\n\r\nexport const AdminModel: ReturnModelType<typeof Admin> = getModelForClass(Admin);\r\n"]}
@@ -0,0 +1,11 @@
1
+ import { ReturnModelType } from '@typegoose/typegoose';
2
+ import { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';
3
+ import { ItemType, SectionType, Status } from '../../../utilities/enum';
4
+ export declare class AppScreenSetting extends TimeStamps {
5
+ itemType: ItemType;
6
+ section: SectionType;
7
+ alias: string;
8
+ status?: Status;
9
+ sortingOrder?: number;
10
+ }
11
+ export declare const AppScreenSettingModel: ReturnModelType<typeof AppScreenSetting>;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AppScreenSettingModel = exports.AppScreenSetting = void 0;
13
+ const typegoose_1 = require("@typegoose/typegoose");
14
+ const defaultClasses_1 = require("@typegoose/typegoose/lib/defaultClasses");
15
+ const enum_1 = require("../../../utilities/enum");
16
+ let AppScreenSetting = class AppScreenSetting extends defaultClasses_1.TimeStamps {
17
+ itemType;
18
+ section;
19
+ alias;
20
+ status;
21
+ sortingOrder;
22
+ };
23
+ exports.AppScreenSetting = AppScreenSetting;
24
+ __decorate([
25
+ (0, typegoose_1.prop)({ required: true, type: String, enum: enum_1.ItemType }),
26
+ __metadata("design:type", String)
27
+ ], AppScreenSetting.prototype, "itemType", void 0);
28
+ __decorate([
29
+ (0, typegoose_1.prop)({ required: true, type: String, enum: enum_1.SectionType }),
30
+ __metadata("design:type", String)
31
+ ], AppScreenSetting.prototype, "section", void 0);
32
+ __decorate([
33
+ (0, typegoose_1.prop)({ required: true, type: String }),
34
+ __metadata("design:type", String)
35
+ ], AppScreenSetting.prototype, "alias", void 0);
36
+ __decorate([
37
+ (0, typegoose_1.prop)({ type: String, enum: enum_1.Status, default: enum_1.Status.ACTIVE }),
38
+ __metadata("design:type", String)
39
+ ], AppScreenSetting.prototype, "status", void 0);
40
+ __decorate([
41
+ (0, typegoose_1.prop)({ type: Number, default: 0 }),
42
+ __metadata("design:type", Number)
43
+ ], AppScreenSetting.prototype, "sortingOrder", void 0);
44
+ exports.AppScreenSetting = AppScreenSetting = __decorate([
45
+ (0, typegoose_1.modelOptions)({ schemaOptions: { collection: 'appScreenSettings' } })
46
+ ], AppScreenSetting);
47
+ exports.AppScreenSettingModel = (0, typegoose_1.getModelForClass)(AppScreenSetting);
48
+ //# sourceMappingURL=app-screen-setting.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-screen-setting.model.js","sourceRoot":"/","sources":["libraries/mongo/models/app-screen-setting.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA6F;AAC7F,4EAAqE;AACrE,kDAAwE;AAGjE,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,2BAAU;IAExC,QAAQ,CAAY;IAGpB,OAAO,CAAe;IAGtB,KAAK,CAAU;IAGf,MAAM,CAAU;IAGhB,YAAY,CAAU;CAC7B,CAAA;AAfY,4CAAgB;AAErB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAQ,EAAE,CAAC;;kDAC5B;AAGpB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAW,EAAE,CAAC;;iDAC7B;AAGtB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;+CACjB;AAGf;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAM,EAAE,OAAO,EAAE,aAAM,CAAC,MAAM,EAAE,CAAC;;gDACtC;AAGhB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;sDACN;2BAdjB,gBAAgB;IAD5B,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,EAAE,CAAC;GACxD,gBAAgB,CAe5B;AAEY,QAAA,qBAAqB,GACjC,IAAA,4BAAgB,EAAC,gBAAgB,CAAC,CAAC","sourcesContent":["import { getModelForClass, modelOptions, prop, ReturnModelType } from '@typegoose/typegoose';\r\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\r\nimport { ItemType, SectionType, Status } from '../../../utilities/enum';\r\n\r\n@modelOptions({ schemaOptions: { collection: 'appScreenSettings' } })\r\nexport class AppScreenSetting extends TimeStamps {\r\n\t@prop({ required: true, type: String, enum: ItemType })\r\n\tpublic itemType!: ItemType;\r\n\r\n\t@prop({ required: true, type: String, enum: SectionType })\r\n\tpublic section!: SectionType;\r\n\r\n\t@prop({ required: true, type: String })\r\n\tpublic alias!: string;\r\n\r\n\t@prop({ type: String, enum: Status, default: Status.ACTIVE })\r\n\tpublic status?: Status;\r\n\r\n\t@prop({ type: Number, default: 0 })\r\n\tpublic sortingOrder?: number;\r\n}\r\n\r\nexport const AppScreenSettingModel: ReturnModelType<typeof AppScreenSetting> =\r\n\tgetModelForClass(AppScreenSetting);\r\n"]}
@@ -0,0 +1,15 @@
1
+ import { Ref, ReturnModelType } from '@typegoose/typegoose';
2
+ import { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';
3
+ import { AttributeItem } from './embedded/attribute-item.model';
4
+ import { AttributeItemSelectionType } from '../../../utilities/enum';
5
+ import { Shop } from './shop.model';
6
+ export declare class Attribute extends TimeStamps {
7
+ shop: Ref<Shop>;
8
+ name: string;
9
+ isRequired?: boolean;
10
+ selectionType: AttributeItemSelectionType;
11
+ minimumRequiredItems?: number;
12
+ maximumRequiredItems?: number;
13
+ items?: AttributeItem[];
14
+ }
15
+ export declare const AttributeModel: ReturnModelType<typeof Attribute>;