90dc-core 1.19.3 → 1.19.4

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 (297) hide show
  1. package/package.json +1 -1
  2. package/dist/index.js +0 -43
  3. package/dist/index.js.map +0 -1
  4. package/dist/lib/Errors/AppError.js +0 -104
  5. package/dist/lib/Errors/AppError.js.map +0 -1
  6. package/dist/lib/Errors/Errors.js +0 -42
  7. package/dist/lib/Errors/Errors.js.map +0 -1
  8. package/dist/lib/classes/Database.js +0 -154
  9. package/dist/lib/classes/Database.js.map +0 -1
  10. package/dist/lib/classes/Redis.js +0 -63
  11. package/dist/lib/classes/Redis.js.map +0 -1
  12. package/dist/lib/clients/EmailClient.js +0 -188
  13. package/dist/lib/clients/EmailClient.js.map +0 -1
  14. package/dist/lib/clients/FirebasePushNotificationClient.js +0 -688
  15. package/dist/lib/clients/FirebasePushNotificationClient.js.map +0 -1
  16. package/dist/lib/clients/ImagesClient.js +0 -271
  17. package/dist/lib/clients/ImagesClient.js.map +0 -1
  18. package/dist/lib/clients/MailingClient.js +0 -84
  19. package/dist/lib/clients/MailingClient.js.map +0 -1
  20. package/dist/lib/clients/PushNotificationClient.js +0 -478
  21. package/dist/lib/clients/PushNotificationClient.js.map +0 -1
  22. package/dist/lib/clients/types/email.types.js +0 -3
  23. package/dist/lib/clients/types/email.types.js.map +0 -1
  24. package/dist/lib/clients/types/images.types.js +0 -3
  25. package/dist/lib/clients/types/images.types.js.map +0 -1
  26. package/dist/lib/clients/types/mailing.types.js +0 -3
  27. package/dist/lib/clients/types/mailing.types.js.map +0 -1
  28. package/dist/lib/config/ConfigValidator.js +0 -162
  29. package/dist/lib/config/ConfigValidator.js.map +0 -1
  30. package/dist/lib/controllers/BaseController.js +0 -64
  31. package/dist/lib/controllers/BaseController.js.map +0 -1
  32. package/dist/lib/db/migrations/20260330000000-create-user-progress-photos.js +0 -60
  33. package/dist/lib/db/migrations/20260330000000-create-user-progress-photos.js.map +0 -1
  34. package/dist/lib/dbmodels/coaching/Answer.js +0 -51
  35. package/dist/lib/dbmodels/coaching/Answer.js.map +0 -1
  36. package/dist/lib/dbmodels/coaching/ClientNote.js +0 -75
  37. package/dist/lib/dbmodels/coaching/ClientNote.js.map +0 -1
  38. package/dist/lib/dbmodels/coaching/ClientTag.js +0 -45
  39. package/dist/lib/dbmodels/coaching/ClientTag.js.map +0 -1
  40. package/dist/lib/dbmodels/coaching/Question.js +0 -60
  41. package/dist/lib/dbmodels/coaching/Question.js.map +0 -1
  42. package/dist/lib/dbmodels/coaching/Questionnaire.js +0 -39
  43. package/dist/lib/dbmodels/coaching/Questionnaire.js.map +0 -1
  44. package/dist/lib/dbmodels/coaching/QuestionnaireResponse.js +0 -42
  45. package/dist/lib/dbmodels/coaching/QuestionnaireResponse.js.map +0 -1
  46. package/dist/lib/dbmodels/coaching/WeeklyCheckIn.js +0 -69
  47. package/dist/lib/dbmodels/coaching/WeeklyCheckIn.js.map +0 -1
  48. package/dist/lib/dbmodels/coaching/WeightRecord.js +0 -49
  49. package/dist/lib/dbmodels/coaching/WeightRecord.js.map +0 -1
  50. package/dist/lib/dbmodels/diet/DietDay.js +0 -50
  51. package/dist/lib/dbmodels/diet/DietDay.js.map +0 -1
  52. package/dist/lib/dbmodels/diet/DietMeal.js +0 -74
  53. package/dist/lib/dbmodels/diet/DietMeal.js.map +0 -1
  54. package/dist/lib/dbmodels/diet/DietMealCompletion.js +0 -69
  55. package/dist/lib/dbmodels/diet/DietMealCompletion.js.map +0 -1
  56. package/dist/lib/dbmodels/diet/DietMealRecipe.js +0 -67
  57. package/dist/lib/dbmodels/diet/DietMealRecipe.js.map +0 -1
  58. package/dist/lib/dbmodels/diet/DietMealRecipeIngredient.js +0 -46
  59. package/dist/lib/dbmodels/diet/DietMealRecipeIngredient.js.map +0 -1
  60. package/dist/lib/dbmodels/diet/DietProgram.js +0 -98
  61. package/dist/lib/dbmodels/diet/DietProgram.js.map +0 -1
  62. package/dist/lib/dbmodels/diet/Ingredient.js +0 -88
  63. package/dist/lib/dbmodels/diet/Ingredient.js.map +0 -1
  64. package/dist/lib/dbmodels/diet/IngredientTag.js +0 -64
  65. package/dist/lib/dbmodels/diet/IngredientTag.js.map +0 -1
  66. package/dist/lib/dbmodels/diet/IngredientTags.js +0 -29
  67. package/dist/lib/dbmodels/diet/IngredientTags.js.map +0 -1
  68. package/dist/lib/dbmodels/diet/Recipe.js +0 -173
  69. package/dist/lib/dbmodels/diet/Recipe.js.map +0 -1
  70. package/dist/lib/dbmodels/diet/RecipeIngredient.js +0 -78
  71. package/dist/lib/dbmodels/diet/RecipeIngredient.js.map +0 -1
  72. package/dist/lib/dbmodels/diet/RecipeTag.js +0 -44
  73. package/dist/lib/dbmodels/diet/RecipeTag.js.map +0 -1
  74. package/dist/lib/dbmodels/diet/RecipeTags.js +0 -24
  75. package/dist/lib/dbmodels/diet/RecipeTags.js.map +0 -1
  76. package/dist/lib/dbmodels/diet/ShoppingList.js +0 -69
  77. package/dist/lib/dbmodels/diet/ShoppingList.js.map +0 -1
  78. package/dist/lib/dbmodels/diet/ShoppingListItem.js +0 -66
  79. package/dist/lib/dbmodels/diet/ShoppingListItem.js.map +0 -1
  80. package/dist/lib/dbmodels/diet/TranslatedRecipe.js +0 -122
  81. package/dist/lib/dbmodels/diet/TranslatedRecipe.js.map +0 -1
  82. package/dist/lib/dbmodels/diet/TranslatedRecipeTag.js +0 -47
  83. package/dist/lib/dbmodels/diet/TranslatedRecipeTag.js.map +0 -1
  84. package/dist/lib/dbmodels/diet/TranslatedRecipeTags.js +0 -24
  85. package/dist/lib/dbmodels/diet/TranslatedRecipeTags.js.map +0 -1
  86. package/dist/lib/dbmodels/diet/UserDietPreferences.js +0 -85
  87. package/dist/lib/dbmodels/diet/UserDietPreferences.js.map +0 -1
  88. package/dist/lib/dbmodels/gamification/Badge.js +0 -62
  89. package/dist/lib/dbmodels/gamification/Badge.js.map +0 -1
  90. package/dist/lib/dbmodels/gamification/StreaksLog.js +0 -37
  91. package/dist/lib/dbmodels/gamification/StreaksLog.js.map +0 -1
  92. package/dist/lib/dbmodels/gamification/TranslatedBadge.js +0 -45
  93. package/dist/lib/dbmodels/gamification/TranslatedBadge.js.map +0 -1
  94. package/dist/lib/dbmodels/gamification/xpAndLeaderboards/UserRankHistory.js +0 -48
  95. package/dist/lib/dbmodels/gamification/xpAndLeaderboards/UserRankHistory.js.map +0 -1
  96. package/dist/lib/dbmodels/gamification/xpAndLeaderboards/XpEvent.js +0 -53
  97. package/dist/lib/dbmodels/gamification/xpAndLeaderboards/XpEvent.js.map +0 -1
  98. package/dist/lib/dbmodels/gamification/xpAndLeaderboards/XpTransaction.js +0 -68
  99. package/dist/lib/dbmodels/gamification/xpAndLeaderboards/XpTransaction.js.map +0 -1
  100. package/dist/lib/dbmodels/index.js +0 -288
  101. package/dist/lib/dbmodels/index.js.map +0 -1
  102. package/dist/lib/dbmodels/nonconsprogram/NonConsumableProgram.d.ts +0 -32
  103. package/dist/lib/dbmodels/nonconsprogram/NonConsumableProgram.d.ts.map +0 -1
  104. package/dist/lib/dbmodels/nonconsprogram/NonConsumableProgram.js +0 -155
  105. package/dist/lib/dbmodels/nonconsprogram/NonConsumableProgram.js.map +0 -1
  106. package/dist/lib/dbmodels/nonconsprogram/NonConsumableProgramWebContent.d.ts +0 -22
  107. package/dist/lib/dbmodels/nonconsprogram/NonConsumableProgramWebContent.d.ts.map +0 -1
  108. package/dist/lib/dbmodels/nonconsprogram/NonConsumableProgramWebContent.js +0 -108
  109. package/dist/lib/dbmodels/nonconsprogram/NonConsumableProgramWebContent.js.map +0 -1
  110. package/dist/lib/dbmodels/nonconsprogram/TranslatedConsumableProgram.d.ts +0 -20
  111. package/dist/lib/dbmodels/nonconsprogram/TranslatedConsumableProgram.d.ts.map +0 -1
  112. package/dist/lib/dbmodels/nonconsprogram/TranslatedConsumableProgram.js +0 -97
  113. package/dist/lib/dbmodels/nonconsprogram/TranslatedConsumableProgram.js.map +0 -1
  114. package/dist/lib/dbmodels/nonconsprogram/TranslatedNonConsumableProgramWebContent.d.ts +0 -22
  115. package/dist/lib/dbmodels/nonconsprogram/TranslatedNonConsumableProgramWebContent.d.ts.map +0 -1
  116. package/dist/lib/dbmodels/nonconsprogram/TranslatedNonConsumableProgramWebContent.js +0 -115
  117. package/dist/lib/dbmodels/nonconsprogram/TranslatedNonConsumableProgramWebContent.js.map +0 -1
  118. package/dist/lib/dbmodels/nonconsprogram/UserNonConsumableProgram.d.ts +0 -7
  119. package/dist/lib/dbmodels/nonconsprogram/UserNonConsumableProgram.d.ts.map +0 -1
  120. package/dist/lib/dbmodels/nonconsprogram/UserNonConsumableProgram.js +0 -41
  121. package/dist/lib/dbmodels/nonconsprogram/UserNonConsumableProgram.js.map +0 -1
  122. package/dist/lib/dbmodels/notifications/NotificationModels.js +0 -38
  123. package/dist/lib/dbmodels/notifications/NotificationModels.js.map +0 -1
  124. package/dist/lib/dbmodels/notifications/TranslatedNotification.js +0 -45
  125. package/dist/lib/dbmodels/notifications/TranslatedNotification.js.map +0 -1
  126. package/dist/lib/dbmodels/program/Challenge.d.ts +0 -13
  127. package/dist/lib/dbmodels/program/Challenge.d.ts.map +0 -1
  128. package/dist/lib/dbmodels/program/Challenge.js +0 -63
  129. package/dist/lib/dbmodels/program/Challenge.js.map +0 -1
  130. package/dist/lib/dbmodels/program/ChallengeBlueprint.js +0 -75
  131. package/dist/lib/dbmodels/program/ChallengeBlueprint.js.map +0 -1
  132. package/dist/lib/dbmodels/program/CircularProgramDraft.js +0 -82
  133. package/dist/lib/dbmodels/program/CircularProgramDraft.js.map +0 -1
  134. package/dist/lib/dbmodels/program/CoachExerciseNote.js +0 -61
  135. package/dist/lib/dbmodels/program/CoachExerciseNote.js.map +0 -1
  136. package/dist/lib/dbmodels/program/CustomProgramBlueprint.js +0 -84
  137. package/dist/lib/dbmodels/program/CustomProgramBlueprint.js.map +0 -1
  138. package/dist/lib/dbmodels/program/CustomStrengthTest.js +0 -55
  139. package/dist/lib/dbmodels/program/CustomStrengthTest.js.map +0 -1
  140. package/dist/lib/dbmodels/program/CustomStrengthTestExercises.js +0 -69
  141. package/dist/lib/dbmodels/program/CustomStrengthTestExercises.js.map +0 -1
  142. package/dist/lib/dbmodels/program/CustomWorkoutBlueprint.js +0 -58
  143. package/dist/lib/dbmodels/program/CustomWorkoutBlueprint.js.map +0 -1
  144. package/dist/lib/dbmodels/program/Exercise.d.ts +0 -23
  145. package/dist/lib/dbmodels/program/Exercise.d.ts.map +0 -1
  146. package/dist/lib/dbmodels/program/Exercise.js +0 -101
  147. package/dist/lib/dbmodels/program/Exercise.js.map +0 -1
  148. package/dist/lib/dbmodels/program/ExerciseModels.d.ts +0 -28
  149. package/dist/lib/dbmodels/program/ExerciseModels.d.ts.map +0 -1
  150. package/dist/lib/dbmodels/program/ExerciseModels.js +0 -149
  151. package/dist/lib/dbmodels/program/ExerciseModels.js.map +0 -1
  152. package/dist/lib/dbmodels/program/Program.d.ts +0 -15
  153. package/dist/lib/dbmodels/program/Program.d.ts.map +0 -1
  154. package/dist/lib/dbmodels/program/Program.js +0 -76
  155. package/dist/lib/dbmodels/program/Program.js.map +0 -1
  156. package/dist/lib/dbmodels/program/ProgressEntry.d.ts +0 -26
  157. package/dist/lib/dbmodels/program/ProgressEntry.d.ts.map +0 -1
  158. package/dist/lib/dbmodels/program/ProgressEntry.js +0 -77
  159. package/dist/lib/dbmodels/program/ProgressEntry.js.map +0 -1
  160. package/dist/lib/dbmodels/program/RestDay.js +0 -33
  161. package/dist/lib/dbmodels/program/RestDay.js.map +0 -1
  162. package/dist/lib/dbmodels/program/StrengthTest.d.ts +0 -10
  163. package/dist/lib/dbmodels/program/StrengthTest.d.ts.map +0 -1
  164. package/dist/lib/dbmodels/program/StrengthTest.js +0 -39
  165. package/dist/lib/dbmodels/program/StrengthTest.js.map +0 -1
  166. package/dist/lib/dbmodels/program/StrengthTestExercise.d.ts +0 -15
  167. package/dist/lib/dbmodels/program/StrengthTestExercise.d.ts.map +0 -1
  168. package/dist/lib/dbmodels/program/StrengthTestExercise.js +0 -72
  169. package/dist/lib/dbmodels/program/StrengthTestExercise.js.map +0 -1
  170. package/dist/lib/dbmodels/program/StrengthTestSession.js +0 -73
  171. package/dist/lib/dbmodels/program/StrengthTestSession.js.map +0 -1
  172. package/dist/lib/dbmodels/program/Superset.d.ts +0 -13
  173. package/dist/lib/dbmodels/program/Superset.d.ts.map +0 -1
  174. package/dist/lib/dbmodels/program/Superset.js +0 -46
  175. package/dist/lib/dbmodels/program/Superset.js.map +0 -1
  176. package/dist/lib/dbmodels/program/ThirtyDayChallenge.js +0 -70
  177. package/dist/lib/dbmodels/program/ThirtyDayChallenge.js.map +0 -1
  178. package/dist/lib/dbmodels/program/ThirtyDayChallengeStrengthTest.js +0 -55
  179. package/dist/lib/dbmodels/program/ThirtyDayChallengeStrengthTest.js.map +0 -1
  180. package/dist/lib/dbmodels/program/TranslatedChallenge.d.ts +0 -15
  181. package/dist/lib/dbmodels/program/TranslatedChallenge.d.ts.map +0 -1
  182. package/dist/lib/dbmodels/program/TranslatedChallenge.js +0 -69
  183. package/dist/lib/dbmodels/program/TranslatedChallenge.js.map +0 -1
  184. package/dist/lib/dbmodels/program/TranslatedExerciseModel.d.ts +0 -25
  185. package/dist/lib/dbmodels/program/TranslatedExerciseModel.d.ts.map +0 -1
  186. package/dist/lib/dbmodels/program/TranslatedExerciseModel.js +0 -123
  187. package/dist/lib/dbmodels/program/TranslatedExerciseModel.js.map +0 -1
  188. package/dist/lib/dbmodels/program/TranslatedStrengthTest.d.ts +0 -12
  189. package/dist/lib/dbmodels/program/TranslatedStrengthTest.d.ts.map +0 -1
  190. package/dist/lib/dbmodels/program/TranslatedStrengthTest.js +0 -45
  191. package/dist/lib/dbmodels/program/TranslatedStrengthTest.js.map +0 -1
  192. package/dist/lib/dbmodels/program/TranslatedStrengthTestExercise.d.ts +0 -16
  193. package/dist/lib/dbmodels/program/TranslatedStrengthTestExercise.d.ts.map +0 -1
  194. package/dist/lib/dbmodels/program/TranslatedStrengthTestExercise.js +0 -78
  195. package/dist/lib/dbmodels/program/TranslatedStrengthTestExercise.js.map +0 -1
  196. package/dist/lib/dbmodels/program/UserChallenge.d.ts +0 -10
  197. package/dist/lib/dbmodels/program/UserChallenge.d.ts.map +0 -1
  198. package/dist/lib/dbmodels/program/UserChallenge.js +0 -47
  199. package/dist/lib/dbmodels/program/UserChallenge.js.map +0 -1
  200. package/dist/lib/dbmodels/program/UserExerciseNote.js +0 -61
  201. package/dist/lib/dbmodels/program/UserExerciseNote.js.map +0 -1
  202. package/dist/lib/dbmodels/program/UserStrengthTests.d.ts +0 -11
  203. package/dist/lib/dbmodels/program/UserStrengthTests.d.ts.map +0 -1
  204. package/dist/lib/dbmodels/program/UserStrengthTests.js +0 -54
  205. package/dist/lib/dbmodels/program/UserStrengthTests.js.map +0 -1
  206. package/dist/lib/dbmodels/program/Workout.d.ts +0 -14
  207. package/dist/lib/dbmodels/program/Workout.d.ts.map +0 -1
  208. package/dist/lib/dbmodels/program/Workout.js +0 -66
  209. package/dist/lib/dbmodels/program/Workout.js.map +0 -1
  210. package/dist/lib/dbmodels/program/WorkoutCompletion.js +0 -65
  211. package/dist/lib/dbmodels/program/WorkoutCompletion.js.map +0 -1
  212. package/dist/lib/dbmodels/program/WorkoutSession.js +0 -93
  213. package/dist/lib/dbmodels/program/WorkoutSession.js.map +0 -1
  214. package/dist/lib/dbmodels/subscription/Subscription.d.ts +0 -19
  215. package/dist/lib/dbmodels/subscription/Subscription.d.ts.map +0 -1
  216. package/dist/lib/dbmodels/subscription/Subscription.js +0 -91
  217. package/dist/lib/dbmodels/subscription/Subscription.js.map +0 -1
  218. package/dist/lib/dbmodels/subscription/SubscriptionEvent.js +0 -79
  219. package/dist/lib/dbmodels/subscription/SubscriptionEvent.js.map +0 -1
  220. package/dist/lib/dbmodels/subscription/SubscriptionLog.d.ts +0 -9
  221. package/dist/lib/dbmodels/subscription/SubscriptionLog.d.ts.map +0 -1
  222. package/dist/lib/dbmodels/subscription/SubscriptionLog.js +0 -42
  223. package/dist/lib/dbmodels/subscription/SubscriptionLog.js.map +0 -1
  224. package/dist/lib/dbmodels/subscription/SubscriptionRefund.js +0 -92
  225. package/dist/lib/dbmodels/subscription/SubscriptionRefund.js.map +0 -1
  226. package/dist/lib/dbmodels/user/DeviceTokens.js +0 -34
  227. package/dist/lib/dbmodels/user/DeviceTokens.js.map +0 -1
  228. package/dist/lib/dbmodels/user/PersistedUser.d.ts +0 -43
  229. package/dist/lib/dbmodels/user/PersistedUser.d.ts.map +0 -1
  230. package/dist/lib/dbmodels/user/PersistedUser.js +0 -237
  231. package/dist/lib/dbmodels/user/PersistedUser.js.map +0 -1
  232. package/dist/lib/dbmodels/user/UserAddons.js +0 -26
  233. package/dist/lib/dbmodels/user/UserAddons.js.map +0 -1
  234. package/dist/lib/dbmodels/user/UserBadges.js +0 -63
  235. package/dist/lib/dbmodels/user/UserBadges.js.map +0 -1
  236. package/dist/lib/dbmodels/user/UserCoach.js +0 -40
  237. package/dist/lib/dbmodels/user/UserCoach.js.map +0 -1
  238. package/dist/lib/dbmodels/user/UserDiscount.js +0 -24
  239. package/dist/lib/dbmodels/user/UserDiscount.js.map +0 -1
  240. package/dist/lib/dbmodels/user/UserOptions.js +0 -34
  241. package/dist/lib/dbmodels/user/UserOptions.js.map +0 -1
  242. package/dist/lib/dbmodels/user/UserProgressPhoto.js +0 -59
  243. package/dist/lib/dbmodels/user/UserProgressPhoto.js.map +0 -1
  244. package/dist/lib/dbmodels/user/UserStreaks.js +0 -64
  245. package/dist/lib/dbmodels/user/UserStreaks.js.map +0 -1
  246. package/dist/lib/dbmodels/user/UsersFriends.js +0 -46
  247. package/dist/lib/dbmodels/user/UsersFriends.js.map +0 -1
  248. package/dist/lib/enums/ProgramEnums.d.ts +0 -18
  249. package/dist/lib/enums/ProgramEnums.d.ts.map +0 -1
  250. package/dist/lib/enums/ProgramEnums.js +0 -22
  251. package/dist/lib/enums/ProgramEnums.js.map +0 -1
  252. package/dist/lib/enums/ProgramTemplates.js +0 -738
  253. package/dist/lib/enums/ProgramTemplates.js.map +0 -1
  254. package/dist/lib/middlewares/ErrorMiddleware.js +0 -141
  255. package/dist/lib/middlewares/ErrorMiddleware.js.map +0 -1
  256. package/dist/lib/middlewares/ValidationMiddleware.js +0 -24
  257. package/dist/lib/middlewares/ValidationMiddleware.js.map +0 -1
  258. package/dist/lib/models/BlueprintInterfaces.js +0 -3
  259. package/dist/lib/models/BlueprintInterfaces.js.map +0 -1
  260. package/dist/lib/models/ExerciseInterfaces.d.ts +0 -68
  261. package/dist/lib/models/ExerciseInterfaces.d.ts.map +0 -1
  262. package/dist/lib/models/ExerciseInterfaces.js +0 -3
  263. package/dist/lib/models/ExerciseInterfaces.js.map +0 -1
  264. package/dist/lib/models/NotificationInterfaces.js +0 -11
  265. package/dist/lib/models/NotificationInterfaces.js.map +0 -1
  266. package/dist/lib/models/ProgramInterfaces.js +0 -3
  267. package/dist/lib/models/ProgramInterfaces.js.map +0 -1
  268. package/dist/lib/models/UserInterfaces.js +0 -3
  269. package/dist/lib/models/UserInterfaces.js.map +0 -1
  270. package/dist/lib/models/WorkoutInterfaces.js +0 -3
  271. package/dist/lib/models/WorkoutInterfaces.js.map +0 -1
  272. package/dist/lib/scripts/cli.js +0 -82
  273. package/dist/lib/scripts/cli.js.map +0 -1
  274. package/dist/lib/scripts/populate-exercise-thumbnails.js +0 -64
  275. package/dist/lib/scripts/populate-exercise-thumbnails.js.map +0 -1
  276. package/dist/lib/scripts/setup-database.js +0 -43
  277. package/dist/lib/scripts/setup-database.js.map +0 -1
  278. package/dist/lib/scripts/verify-indexes.js +0 -94
  279. package/dist/lib/scripts/verify-indexes.js.map +0 -1
  280. package/dist/lib/testing/testFixtures.js +0 -520
  281. package/dist/lib/testing/testFixtures.js.map +0 -1
  282. package/dist/lib/testing/testHelpers.js +0 -149
  283. package/dist/lib/testing/testHelpers.js.map +0 -1
  284. package/dist/lib/utils/AuthenticationUtil.js +0 -481
  285. package/dist/lib/utils/AuthenticationUtil.js.map +0 -1
  286. package/dist/lib/utils/Logger.js +0 -242
  287. package/dist/lib/utils/Logger.js.map +0 -1
  288. package/dist/lib/utils/NotificationClient.js +0 -371
  289. package/dist/lib/utils/NotificationClient.js.map +0 -1
  290. package/dist/lib/utils/NotificationsUtil.js +0 -95
  291. package/dist/lib/utils/NotificationsUtil.js.map +0 -1
  292. package/dist/lib/utils/SecretManager.js +0 -107
  293. package/dist/lib/utils/SecretManager.js.map +0 -1
  294. package/dist/lib/utils/SentryUtil.js +0 -140
  295. package/dist/lib/utils/SentryUtil.js.map +0 -1
  296. package/dist/lib/utils/imageValidation.js +0 -31
  297. package/dist/lib/utils/imageValidation.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "90dc-core",
3
- "version": "1.19.3",
3
+ "version": "1.19.4",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/dist/index.js DELETED
@@ -1,43 +0,0 @@
1
- //Interfaces
2
- export * from "./lib/models/ProgramInterfaces.js";
3
- export * from "./lib/models/ExerciseInterfaces.js";
4
- export * from "./lib/models/WorkoutInterfaces.js";
5
- export * from "./lib/models/UserInterfaces.js";
6
- export * from "./lib/models/NotificationInterfaces.js";
7
- //DB Models - Export all models and model arrays
8
- export * from "./lib/dbmodels/index.js";
9
- //Clients
10
- export { EmailClient } from "./lib/clients/EmailClient.js";
11
- export { ImagesClient } from "./lib/clients/ImagesClient.js";
12
- export { MailingClient } from "./lib/clients/MailingClient.js";
13
- export { PushNotificationClient } from "./lib/clients/PushNotificationClient.js";
14
- export { FirebasePushNotificationClient } from "./lib/clients/FirebasePushNotificationClient.js";
15
- //Client Types (namespace imports)
16
- export * as EmailTypes from "./lib/clients/types/email.types.js";
17
- export * as ImagesTypes from "./lib/clients/types/images.types.js";
18
- export * as MailingTypes from "./lib/clients/types/mailing.types.js";
19
- //Utils
20
- export { AuthenticationUtil } from "./lib/utils/AuthenticationUtil.js";
21
- export { NotificationsUtil } from "./lib/utils/NotificationsUtil.js";
22
- export { NotificationClient } from "./lib/utils/NotificationClient.js";
23
- export { Log } from "./lib/utils/Logger.js";
24
- export { SecretManager } from "./lib/utils/SecretManager.js";
25
- export { validateBase64Image, ImageValidationError } from "./lib/utils/imageValidation.js";
26
- export { initializeSentry, isSentryEnabled, scrubObject, captureRequestBody, extractUserContext, buildRequestContext, buildResponseContext, reportErrorToSentry, reportMessageToSentry } from "./lib/utils/SentryUtil.js";
27
- //Testing Utilities
28
- export { createMockContext, createMockUser, createAuthenticatedContext, mockDatabase, flushPromises, assertions, executeRoute } from "./lib/testing/testHelpers.js";
29
- // Testing Fixtures
30
- export { TEST_UUIDS, TEST_DATES, TEST_DATA, isValidUUID, generateTestEmail, createTestUser, createTestCoach, createTestHeadCoach, createTestFinanceUser, createTestAdmin, createTestClient, wait, freezeTime, testAssertions, mockResponses, isObject, isArray } from "./lib/testing/testFixtures.js";
31
- //Config
32
- export { ConfigValidator, BaseConfigSchema, CommonSchemas, createConfig, ConfigurationError } from "./lib/config/ConfigValidator.js";
33
- //Errors
34
- export { AppError, ValidationError, AuthenticationError, ForbiddenError, NotFoundError, ConflictError, UnprocessableEntityError, RateLimitError, InternalServerError, ServiceUnavailableError, DatabaseError, ExternalAPIError, isAppError, isOperationalError, toAppError } from "./lib/Errors/AppError.js";
35
- //Middlewares
36
- export { ErrorMiddleware } from "./lib/middlewares/ErrorMiddleware.js";
37
- export { validate } from "./lib/middlewares/ValidationMiddleware.js";
38
- //Controllers
39
- export { BaseController } from "./lib/controllers/BaseController.js";
40
- export { RedisClient } from "./lib/classes/Redis.js";
41
- export { DatabaseClient } from "./lib/classes/Database.js";
42
-
43
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["//Interfaces\nexport * from \"./lib/models/ProgramInterfaces.js\";\nexport * from \"./lib/models/ExerciseInterfaces.js\";\nexport * from \"./lib/models/WorkoutInterfaces.js\";\nexport * from \"./lib/models/UserInterfaces.js\";\nexport * from \"./lib/models/NotificationInterfaces.js\";\n\n//DB Models - Export all models and model arrays\nexport * from \"./lib/dbmodels/index.js\"\n\n//Clients\nexport { EmailClient } from \"./lib/clients/EmailClient.js\"\nexport { ImagesClient } from \"./lib/clients/ImagesClient.js\"\nexport { MailingClient } from \"./lib/clients/MailingClient.js\"\nexport { PushNotificationClient } from \"./lib/clients/PushNotificationClient.js\"\nexport { FirebasePushNotificationClient } from \"./lib/clients/FirebasePushNotificationClient.js\"\n\n//Client Types (namespace imports)\nexport * as EmailTypes from \"./lib/clients/types/email.types.js\"\nexport * as ImagesTypes from \"./lib/clients/types/images.types.js\"\nexport * as MailingTypes from \"./lib/clients/types/mailing.types.js\"\nexport type { NotificationPayload } from \"./lib/clients/PushNotificationClient.js\"\n\n// Progress Photos Types\nexport type {\n UserProgressPhotoInput,\n UserProgressPhotoRecord,\n UpdateProgressPhotoDateInput,\n} from \"./lib/clients/types/images.types.js\"\n\n//Utils\nexport {AuthenticationUtil} from \"./lib/utils/AuthenticationUtil.js\"\nexport {NotificationsUtil} from \"./lib/utils/NotificationsUtil.js\"\nexport {NotificationClient} from \"./lib/utils/NotificationClient.js\"\nexport {Log} from \"./lib/utils/Logger.js\"\nexport {SecretManager} from \"./lib/utils/SecretManager.js\"\nexport { validateBase64Image, ImageValidationError } from \"./lib/utils/imageValidation.js\"\nexport {\n initializeSentry,\n isSentryEnabled,\n scrubObject,\n captureRequestBody,\n extractUserContext,\n buildRequestContext,\n buildResponseContext,\n reportErrorToSentry,\n reportMessageToSentry,\n type ErrorReportOptions,\n type SeverityLevel,\n} from \"./lib/utils/SentryUtil.js\"\n\n//Testing Utilities\nexport {\n createMockContext,\n createMockUser,\n createAuthenticatedContext,\n mockDatabase,\n flushPromises,\n assertions,\n executeRoute,\n type BaseContext,\n type AuthenticatedContext,\n type RouterContext,\n type RouterMiddleware,\n type RouterLayer,\n type RouterLike,\n type SequelizeModelMethods,\n} from \"./lib/testing/testHelpers.js\"\n\n// Testing Fixtures\nexport {\n TEST_UUIDS,\n TEST_DATES,\n TEST_DATA,\n isValidUUID,\n generateTestEmail,\n createTestUser,\n createTestCoach,\n createTestHeadCoach,\n createTestFinanceUser,\n createTestAdmin,\n createTestClient,\n wait,\n freezeTime,\n testAssertions,\n mockResponses,\n isObject,\n isArray,\n} from \"./lib/testing/testFixtures.js\"\n\n//Config\nexport {\n ConfigValidator,\n BaseConfigSchema,\n CommonSchemas,\n createConfig,\n ConfigurationError,\n type BaseConfig\n} from \"./lib/config/ConfigValidator.js\"\n\n//Errors\nexport {\n AppError,\n ValidationError,\n AuthenticationError,\n ForbiddenError,\n NotFoundError,\n ConflictError,\n UnprocessableEntityError,\n RateLimitError,\n InternalServerError,\n ServiceUnavailableError,\n DatabaseError,\n ExternalAPIError,\n isAppError,\n isOperationalError,\n toAppError\n} from \"./lib/Errors/AppError.js\"\n\n//Middlewares\nexport {\n ErrorMiddleware,\n} from \"./lib/middlewares/ErrorMiddleware.js\"\nexport { validate, type ValidationConfig } from \"./lib/middlewares/ValidationMiddleware.js\";\n\n//Controllers\nexport { BaseController, type RouteConfig } from \"./lib/controllers/BaseController.js\";\n\n\nexport {RedisClient} from \"./lib/classes/Redis.js\"\nexport {DatabaseClient, type DatabaseConfig} from \"./lib/classes/Database.js\""],"names":["EmailClient","ImagesClient","MailingClient","PushNotificationClient","FirebasePushNotificationClient","EmailTypes","ImagesTypes","MailingTypes","AuthenticationUtil","NotificationsUtil","NotificationClient","Log","SecretManager","validateBase64Image","ImageValidationError","initializeSentry","isSentryEnabled","scrubObject","captureRequestBody","extractUserContext","buildRequestContext","buildResponseContext","reportErrorToSentry","reportMessageToSentry","createMockContext","createMockUser","createAuthenticatedContext","mockDatabase","flushPromises","assertions","executeRoute","TEST_UUIDS","TEST_DATES","TEST_DATA","isValidUUID","generateTestEmail","createTestUser","createTestCoach","createTestHeadCoach","createTestFinanceUser","createTestAdmin","createTestClient","wait","freezeTime","testAssertions","mockResponses","isObject","isArray","ConfigValidator","BaseConfigSchema","CommonSchemas","createConfig","ConfigurationError","AppError","ValidationError","AuthenticationError","ForbiddenError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","ServiceUnavailableError","DatabaseError","ExternalAPIError","isAppError","isOperationalError","toAppError","ErrorMiddleware","validate","BaseController","RedisClient","DatabaseClient"],"mappings":"AAAA,YAAY;AACZ,cAAc,oCAAoC;AAClD,cAAc,qCAAqC;AACnD,cAAc,oCAAoC;AAClD,cAAc,iCAAiC;AAC/C,cAAc,yCAAyC;AAEvD,gDAAgD;AAChD,cAAc,iBAAyB;AAEvC,SAAS;AACT,SAASA,WAAW,QAAQ,+BAA8B;AAC1D,SAASC,YAAY,QAAQ,gCAA+B;AAC5D,SAASC,aAAa,QAAQ,iCAAgC;AAC9D,SAASC,sBAAsB,QAAQ,0CAAyC;AAChF,SAASC,8BAA8B,QAAQ,kDAAiD;AAEhG,kCAAkC;AAClC,OAAO,KAAKC,UAAU,MAAM,qCAAoC;AAChE,OAAO,KAAKC,WAAW,MAAM,sCAAqC;AAClE,OAAO,KAAKC,YAAY,MAAM,uCAAsC;AAUpE,OAAO;AACP,SAAQC,kBAAkB,QAAO,oCAAmC;AACpE,SAAQC,iBAAiB,QAAO,mCAAkC;AAClE,SAAQC,kBAAkB,QAAO,oCAAmC;AACpE,SAAQC,GAAG,QAAO,wBAAuB;AACzC,SAAQC,aAAa,QAAO,+BAA8B;AAC1D,SAASC,mBAAmB,EAAEC,oBAAoB,QAAQ,iCAAgC;AAC1F,SACEC,gBAAgB,EAChBC,eAAe,EACfC,WAAW,EACXC,kBAAkB,EAClBC,kBAAkB,EAClBC,mBAAmB,EACnBC,oBAAoB,EACpBC,mBAAmB,EACnBC,qBAAqB,QAGhB,4BAA2B;AAElC,mBAAmB;AACnB,SACEC,iBAAiB,EACjBC,cAAc,EACdC,0BAA0B,EAC1BC,YAAY,EACZC,aAAa,EACbC,UAAU,EACVC,YAAY,QAQP,+BAA8B;AAErC,mBAAmB;AACnB,SACEC,UAAU,EACVC,UAAU,EACVC,SAAS,EACTC,WAAW,EACXC,iBAAiB,EACjBC,cAAc,EACdC,eAAe,EACfC,mBAAmB,EACnBC,qBAAqB,EACrBC,eAAe,EACfC,gBAAgB,EAChBC,IAAI,EACJC,UAAU,EACVC,cAAc,EACdC,aAAa,EACbC,QAAQ,EACRC,OAAO,QACF,gCAA+B;AAEtC,QAAQ;AACR,SACEC,eAAe,EACfC,gBAAgB,EAChBC,aAAa,EACbC,YAAY,EACZC,kBAAkB,QAEb,kCAAiC;AAExC,QAAQ;AACR,SACEC,QAAQ,EACRC,eAAe,EACfC,mBAAmB,EACnBC,cAAc,EACdC,aAAa,EACbC,aAAa,EACbC,wBAAwB,EACxBC,cAAc,EACdC,mBAAmB,EACnBC,uBAAuB,EACvBC,aAAa,EACbC,gBAAgB,EAChBC,UAAU,EACVC,kBAAkB,EAClBC,UAAU,QACL,2BAA0B;AAEjC,aAAa;AACb,SACEC,eAAe,QACV,uCAAsC;AAC7C,SAASC,QAAQ,QAA+B,4CAA4C;AAE5F,aAAa;AACb,SAASC,cAAc,QAA0B,sCAAsC;AAGvF,SAAQC,WAAW,QAAO,yBAAwB;AAClD,SAAQC,cAAc,QAA4B,4BAA2B"}
@@ -1,104 +0,0 @@
1
- export class AppError extends Error {
2
- code;
3
- statusCode;
4
- details;
5
- isOperational;
6
- constructor(code, message, statusCode, details, isOperational = true){
7
- super(message), this.code = code, this.statusCode = statusCode, this.details = details;
8
- this.name = new.target.name;
9
- this.isOperational = isOperational;
10
- Error.captureStackTrace?.(this, new.target);
11
- }
12
- toJSON() {
13
- const error = {
14
- code: this.code,
15
- message: this.message
16
- };
17
- if (this.details !== undefined) {
18
- error.details = this.details;
19
- }
20
- return {
21
- error
22
- };
23
- }
24
- }
25
- export class ValidationError extends AppError {
26
- constructor(message, details){
27
- super('VALIDATION_ERROR', message, 400, details);
28
- }
29
- }
30
- export class AuthenticationError extends AppError {
31
- constructor(message = 'Authentication required'){
32
- super('AUTHENTICATION_ERROR', message, 401);
33
- }
34
- }
35
- export class ForbiddenError extends AppError {
36
- constructor(message = 'Access forbidden'){
37
- super('FORBIDDEN', message, 403);
38
- }
39
- }
40
- export class NotFoundError extends AppError {
41
- constructor(resource = 'Resource'){
42
- super('NOT_FOUND', `${resource} not found`, 404);
43
- }
44
- }
45
- export class ConflictError extends AppError {
46
- constructor(message, details){
47
- super('CONFLICT', message, 409, details);
48
- }
49
- }
50
- export class UnprocessableEntityError extends AppError {
51
- constructor(message, details){
52
- super('UNPROCESSABLE_ENTITY', message, 422, details);
53
- }
54
- }
55
- export class RateLimitError extends AppError {
56
- constructor(message = 'Too many requests, please try again later'){
57
- super('RATE_LIMIT_EXCEEDED', message, 429);
58
- }
59
- }
60
- export class InternalServerError extends AppError {
61
- constructor(message = 'Internal server error', details){
62
- super('INTERNAL_ERROR', message, 500, details, false);
63
- }
64
- }
65
- export class ServiceUnavailableError extends AppError {
66
- constructor(service = 'Service'){
67
- super('SERVICE_UNAVAILABLE', `${service} is temporarily unavailable`, 503);
68
- }
69
- }
70
- export class DatabaseError extends AppError {
71
- constructor(message, details){
72
- super('DATABASE_ERROR', message, 500, details, false);
73
- }
74
- }
75
- export class ExternalAPIError extends AppError {
76
- constructor(service, message, statusCode = 502, details){
77
- super('EXTERNAL_API_ERROR', `${service}: ${message}`, statusCode, details);
78
- }
79
- }
80
- export function isAppError(error) {
81
- return error instanceof AppError;
82
- }
83
- export function isOperationalError(error) {
84
- if (error instanceof AppError) {
85
- return error.isOperational;
86
- }
87
- return false;
88
- }
89
- export function toAppError(error) {
90
- if (error instanceof AppError) {
91
- return error;
92
- }
93
- if (error instanceof Error) {
94
- return new InternalServerError(error.message, {
95
- originalError: error.name,
96
- stack: error.stack
97
- });
98
- }
99
- return new InternalServerError('An unexpected error occurred', {
100
- error: String(error)
101
- });
102
- }
103
-
104
- //# sourceMappingURL=AppError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/Errors/AppError.ts"],"sourcesContent":["export class AppError extends Error {\n public readonly isOperational: boolean;\n\n constructor(\n public readonly code: string,\n message: string,\n public readonly statusCode: number,\n public readonly details?: unknown,\n isOperational = true\n ) {\n super(message);\n this.name = new.target.name;\n this.isOperational = isOperational;\n Error.captureStackTrace?.(this, new.target);\n }\n\n toJSON() {\n const error: Record<string, unknown> = {\n code: this.code,\n message: this.message,\n };\n\n if (this.details !== undefined) {\n error.details = this.details;\n }\n\n return { error };\n }\n}\n\n\nexport class ValidationError extends AppError {\n constructor(message: string, details?: unknown) {\n super('VALIDATION_ERROR', message, 400, details);\n }\n}\n\n\nexport class AuthenticationError extends AppError {\n constructor(message: string = 'Authentication required') {\n super('AUTHENTICATION_ERROR', message, 401);\n }\n}\n\n\nexport class ForbiddenError extends AppError {\n constructor(message: string = 'Access forbidden') {\n super('FORBIDDEN', message, 403);\n }\n}\n\n\nexport class NotFoundError extends AppError {\n constructor(resource: string = 'Resource') {\n super('NOT_FOUND', `${resource} not found`, 404);\n }\n}\n\n\nexport class ConflictError extends AppError {\n constructor(message: string, details?: unknown) {\n super('CONFLICT', message, 409, details);\n }\n}\n\n\nexport class UnprocessableEntityError extends AppError {\n constructor(message: string, details?: unknown) {\n super('UNPROCESSABLE_ENTITY', message, 422, details);\n }\n}\n\nexport class RateLimitError extends AppError {\n constructor(message: string = 'Too many requests, please try again later') {\n super('RATE_LIMIT_EXCEEDED', message, 429);\n }\n}\n\n\nexport class InternalServerError extends AppError {\n constructor(message: string = 'Internal server error', details?: unknown) {\n super('INTERNAL_ERROR', message, 500, details, false);\n }\n}\n\n\nexport class ServiceUnavailableError extends AppError {\n constructor(service: string = 'Service') {\n super('SERVICE_UNAVAILABLE', `${service} is temporarily unavailable`, 503);\n }\n}\n\n\nexport class DatabaseError extends AppError {\n constructor(message: string, details?: unknown) {\n super('DATABASE_ERROR', message, 500, details, false);\n }\n}\n\n\nexport class ExternalAPIError extends AppError {\n constructor(\n service: string,\n message: string,\n statusCode: number = 502,\n details?: unknown\n ) {\n super(\n 'EXTERNAL_API_ERROR',\n `${service}: ${message}`,\n statusCode,\n details\n );\n }\n}\n\n\nexport function isAppError(error: unknown): error is AppError {\n return error instanceof AppError;\n}\n\n\nexport function isOperationalError(error: unknown): boolean {\n if (error instanceof AppError) {\n return error.isOperational;\n }\n return false;\n}\n\n\nexport function toAppError(error: unknown): AppError {\n if (error instanceof AppError) {\n return error;\n }\n\n if (error instanceof Error) {\n return new InternalServerError(error.message, {\n originalError: error.name,\n stack: error.stack,\n });\n }\n\n return new InternalServerError('An unexpected error occurred', {\n error: String(error),\n });\n}\n"],"names":["AppError","Error","isOperational","code","message","statusCode","details","name","captureStackTrace","toJSON","error","undefined","ValidationError","AuthenticationError","ForbiddenError","NotFoundError","resource","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","ServiceUnavailableError","service","DatabaseError","ExternalAPIError","isAppError","isOperationalError","toAppError","originalError","stack","String"],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- export class ExerciseNotFound extends Error {
2
- error = {};
3
- constructor(message){
4
- super();
5
- this.error = message;
6
- Object.setPrototypeOf(this, ExerciseNotFound.prototype);
7
- }
8
- }
9
- export class ExerciseAlreadyUsed extends Error {
10
- error = {};
11
- constructor(message){
12
- super();
13
- this.error = message;
14
- Object.setPrototypeOf(this, ExerciseNotFound.prototype);
15
- }
16
- }
17
- export class AppleTransactionError extends Error {
18
- error = {};
19
- constructor(message){
20
- super();
21
- this.error = message;
22
- Object.setPrototypeOf(this, AppleTransactionError.prototype);
23
- }
24
- }
25
- export class ProgramNotFound extends Error {
26
- error = {};
27
- constructor(message){
28
- super();
29
- this.error = message;
30
- Object.setPrototypeOf(this, ProgramNotFound.prototype);
31
- }
32
- }
33
- export class NotificationNotSent extends Error {
34
- error = {};
35
- constructor(message){
36
- super();
37
- this.error = message;
38
- Object.setPrototypeOf(this, NotificationNotSent.prototype);
39
- }
40
- }
41
-
42
- //# sourceMappingURL=Errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/Errors/Errors.ts"],"sourcesContent":["export class ExerciseNotFound extends Error {\n error = {};\n\n constructor(message: object) {\n super();\n this.error = message;\n Object.setPrototypeOf(this, ExerciseNotFound.prototype);\n }\n}\n\nexport class ExerciseAlreadyUsed extends Error {\n error = {};\n\n constructor(message: object) {\n super();\n this.error = message;\n Object.setPrototypeOf(this, ExerciseNotFound.prototype);\n }\n}\n\nexport class AppleTransactionError extends Error {\n error = {};\n\n constructor(message: string) {\n super();\n this.error = message;\n Object.setPrototypeOf(this, AppleTransactionError.prototype);\n }\n}\n\nexport class ProgramNotFound extends Error {\n error = {};\n\n constructor(message: object) {\n super();\n this.error = message;\n Object.setPrototypeOf(this, ProgramNotFound.prototype);\n }\n}\n\nexport class NotificationNotSent extends Error {\n error = {};\n\n constructor(message: object) {\n super();\n this.error = message;\n Object.setPrototypeOf(this, NotificationNotSent.prototype);\n }\n}\n"],"names":["ExerciseNotFound","Error","error","message","Object","setPrototypeOf","prototype","ExerciseAlreadyUsed","AppleTransactionError","ProgramNotFound","NotificationNotSent"],"mappings":"AAAA,OAAO,MAAMA,yBAAyBC;IACpCC,QAAQ,CAAC,EAAE;IAEX,YAAYC,OAAe,CAAE;QAC3B,KAAK;QACL,IAAI,CAACD,KAAK,GAAGC;QACbC,OAAOC,cAAc,CAAC,IAAI,EAAEL,iBAAiBM,SAAS;IACxD;AACF;AAEA,OAAO,MAAMC,4BAA4BN;IACvCC,QAAQ,CAAC,EAAE;IAEX,YAAYC,OAAe,CAAE;QAC3B,KAAK;QACL,IAAI,CAACD,KAAK,GAAGC;QACbC,OAAOC,cAAc,CAAC,IAAI,EAAEL,iBAAiBM,SAAS;IACxD;AACF;AAEA,OAAO,MAAME,8BAA8BP;IACzCC,QAAQ,CAAC,EAAE;IAEX,YAAYC,OAAe,CAAE;QAC3B,KAAK;QACL,IAAI,CAACD,KAAK,GAAGC;QACbC,OAAOC,cAAc,CAAC,IAAI,EAAEG,sBAAsBF,SAAS;IAC7D;AACF;AAEA,OAAO,MAAMG,wBAAwBR;IACnCC,QAAQ,CAAC,EAAE;IAEX,YAAYC,OAAe,CAAE;QAC3B,KAAK;QACL,IAAI,CAACD,KAAK,GAAGC;QACbC,OAAOC,cAAc,CAAC,IAAI,EAAEI,gBAAgBH,SAAS;IACvD;AACF;AAEA,OAAO,MAAMI,4BAA4BT;IACvCC,QAAQ,CAAC,EAAE;IAEX,YAAYC,OAAe,CAAE;QAC3B,KAAK;QACL,IAAI,CAACD,KAAK,GAAGC;QACbC,OAAOC,cAAc,CAAC,IAAI,EAAEK,oBAAoBJ,SAAS;IAC3D;AACF"}
@@ -1,154 +0,0 @@
1
- import { Sequelize } from "sequelize-typescript";
2
- import { Log } from "../utils/Logger.js";
3
- const logger = Log.getInstance();
4
- export class DatabaseClient {
5
- static instance = null;
6
- static isConnected = false;
7
- static getInstance(config, models) {
8
- if (!DatabaseClient.instance) {
9
- if (!config) {
10
- throw new Error("DatabaseClient: config is required for first initialization");
11
- }
12
- const poolConfig = {
13
- max: config.DB_POOL_MAX || 10,
14
- min: config.DB_POOL_MIN || 0,
15
- acquire: config.DB_ACQUIRE_TIMEOUT || 60000,
16
- idle: config.DB_IDLE_TIMEOUT || 10000,
17
- evict: config.DB_EVICT_INTERVAL || 5000
18
- };
19
- const options = {
20
- dialect: "postgres",
21
- dialectOptions: {
22
- socketPath: new URL(config.DATABASE_URL).hostname
23
- },
24
- pool: poolConfig,
25
- logging: config.logging !== false ? (msg)=>logger.debug(msg) : false,
26
- models: models || [],
27
- define: {
28
- timestamps: false
29
- }
30
- };
31
- DatabaseClient.instance = new Sequelize(config.DATABASE_URL, options);
32
- logger.info("DatabaseClient: Sequelize instance created", {
33
- poolConfig
34
- });
35
- // Set up connection pool monitoring
36
- DatabaseClient.setupPoolMonitoring();
37
- } else if (models && models.length > 0) {
38
- DatabaseClient.instance.addModels(models);
39
- logger.info(`DatabaseClient: Added ${models.length} additional models`);
40
- }
41
- return DatabaseClient.instance;
42
- }
43
- static async authenticate() {
44
- if (!DatabaseClient.instance) {
45
- throw new Error("DatabaseClient: getInstance() must be called before authenticate()");
46
- }
47
- try {
48
- await DatabaseClient.instance.authenticate();
49
- DatabaseClient.isConnected = true;
50
- logger.info("DatabaseClient: Connection authenticated successfully");
51
- } catch (error) {
52
- DatabaseClient.isConnected = false;
53
- // Enhanced error handling for common connection issues
54
- if (error instanceof Error) {
55
- if (error.message.includes("too many clients")) {
56
- logger.error("DatabaseClient: PostgreSQL connection pool exhausted", {
57
- error: error.message,
58
- recommendation: "Increase DB_POOL_MAX or check for connection leaks"
59
- });
60
- } else if (error.message.includes("timeout")) {
61
- logger.error("DatabaseClient: Connection timeout", {
62
- error: error.message,
63
- recommendation: "Check network connectivity or increase DB_ACQUIRE_TIMEOUT"
64
- });
65
- } else if (error.message.includes("authentication failed")) {
66
- logger.error("DatabaseClient: Authentication failed", {
67
- error: error.message,
68
- recommendation: "Verify DB credentials in environment variables"
69
- });
70
- } else {
71
- logger.error("DatabaseClient: Unable to connect to database", error);
72
- }
73
- } else {
74
- logger.error("DatabaseClient: Unable to connect to database", error);
75
- }
76
- throw error;
77
- }
78
- }
79
- static async close() {
80
- if (DatabaseClient.instance) {
81
- await DatabaseClient.instance.close();
82
- DatabaseClient.instance = null;
83
- DatabaseClient.isConnected = false;
84
- logger.info("DatabaseClient: Connection closed");
85
- }
86
- }
87
- static async sync(options) {
88
- if (!DatabaseClient.instance) {
89
- throw new Error("DatabaseClient: getInstance() must be called before sync()");
90
- }
91
- try {
92
- await DatabaseClient.instance.sync(options);
93
- logger.info("DatabaseClient: Models synced with database", options);
94
- } catch (error) {
95
- logger.error("DatabaseClient: Failed to sync models", error);
96
- throw error;
97
- }
98
- }
99
- static isConnectedToDatabase() {
100
- return DatabaseClient.isConnected;
101
- }
102
- static getSequelizeInstance() {
103
- if (!DatabaseClient.instance) {
104
- throw new Error("DatabaseClient: getInstance() must be called before getSequelizeInstance()");
105
- }
106
- return DatabaseClient.instance;
107
- }
108
- static setupPoolMonitoring() {
109
- if (!DatabaseClient.instance) {
110
- return;
111
- }
112
- const pool = DatabaseClient.instance.connectionManager?.pool;
113
- if (!pool) {
114
- logger.warn("DatabaseClient: Connection pool not available for monitoring");
115
- return;
116
- }
117
- // Log pool stats every 60 seconds in production
118
- if (process.env.NODE_ENV === "production") {
119
- setInterval(()=>{
120
- try {
121
- const stats = {
122
- size: pool.size,
123
- available: pool.available,
124
- using: pool.using,
125
- waiting: pool.waiting
126
- };
127
- // Only log if pool is being used or has waiting requests
128
- if (stats.using > 0 || stats.waiting > 0) {
129
- logger.info("DatabaseClient: Pool stats", stats);
130
- }
131
- // Warn if pool is near capacity
132
- if (stats.using >= pool.max * 0.8) {
133
- logger.warn("DatabaseClient: Pool usage high", {
134
- ...stats,
135
- capacityPercent: Math.round(stats.using / pool.max * 100)
136
- });
137
- }
138
- // Alert if requests are waiting
139
- if (stats.waiting > 0) {
140
- logger.error("DatabaseClient: Connections waiting for pool", {
141
- ...stats,
142
- message: "Consider increasing DB_POOL_MAX"
143
- });
144
- }
145
- } catch (error) {
146
- logger.debug("DatabaseClient: Error reading pool stats", error);
147
- }
148
- }, 60000); // Every 60 seconds
149
- }
150
- logger.info("DatabaseClient: Pool monitoring enabled");
151
- }
152
- }
153
-
154
- //# sourceMappingURL=Database.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/classes/Database.ts"],"sourcesContent":["import { Sequelize, type SequelizeOptions, type ModelCtor } from \"sequelize-typescript\";\nimport { Log } from \"../utils/Logger.js\";\n\nconst logger = Log.getInstance();\n\nexport interface DatabaseConfig {\n DATABASE_URL: string;\n DB_POOL_MAX?: number;\n DB_POOL_MIN?: number;\n DB_ACQUIRE_TIMEOUT?: number;\n DB_IDLE_TIMEOUT?: number;\n DB_EVICT_INTERVAL?: number;\n logging?: boolean;\n}\n\nexport class DatabaseClient {\n private static instance: Sequelize | null = null;\n private static isConnected: boolean = false;\n\n static getInstance(\n config?: DatabaseConfig,\n models?: ModelCtor[],\n ): Sequelize {\n if (!DatabaseClient.instance) {\n if (!config) {\n throw new Error(\n \"DatabaseClient: config is required for first initialization\",\n );\n }\n\n const poolConfig = {\n max: config.DB_POOL_MAX || 10,\n min: config.DB_POOL_MIN || 0,\n acquire: config.DB_ACQUIRE_TIMEOUT || 60000,\n idle: config.DB_IDLE_TIMEOUT || 10000,\n evict: config.DB_EVICT_INTERVAL || 5000,\n };\n\n const options: SequelizeOptions = {\n dialect: \"postgres\",\n dialectOptions: {\n socketPath: new URL(config.DATABASE_URL).hostname,\n },\n pool: poolConfig,\n logging: config.logging !== false ? (msg: string) => logger.debug(msg) : false,\n models: models || [],\n define: {\n timestamps: false\n }\n };\n\n DatabaseClient.instance = new Sequelize(config.DATABASE_URL, options);\n logger.info(\"DatabaseClient: Sequelize instance created\", {\n poolConfig,\n });\n\n // Set up connection pool monitoring\n DatabaseClient.setupPoolMonitoring();\n } else if (models && models.length > 0) {\n DatabaseClient.instance.addModels(models);\n logger.info(`DatabaseClient: Added ${models.length} additional models`);\n }\n\n return DatabaseClient.instance;\n }\n\n static async authenticate(): Promise<void> {\n if (!DatabaseClient.instance) {\n throw new Error(\n \"DatabaseClient: getInstance() must be called before authenticate()\",\n );\n }\n\n try {\n await DatabaseClient.instance.authenticate();\n DatabaseClient.isConnected = true;\n logger.info(\"DatabaseClient: Connection authenticated successfully\");\n } catch (error) {\n DatabaseClient.isConnected = false;\n\n // Enhanced error handling for common connection issues\n if (error instanceof Error) {\n if (error.message.includes(\"too many clients\")) {\n logger.error(\"DatabaseClient: PostgreSQL connection pool exhausted\", {\n error: error.message,\n recommendation: \"Increase DB_POOL_MAX or check for connection leaks\",\n });\n } else if (error.message.includes(\"timeout\")) {\n logger.error(\"DatabaseClient: Connection timeout\", {\n error: error.message,\n recommendation: \"Check network connectivity or increase DB_ACQUIRE_TIMEOUT\",\n });\n } else if (error.message.includes(\"authentication failed\")) {\n logger.error(\"DatabaseClient: Authentication failed\", {\n error: error.message,\n recommendation: \"Verify DB credentials in environment variables\",\n });\n } else {\n logger.error(\"DatabaseClient: Unable to connect to database\", error);\n }\n } else {\n logger.error(\"DatabaseClient: Unable to connect to database\", error);\n }\n\n throw error;\n }\n }\n\n\n static async close(): Promise<void> {\n if (DatabaseClient.instance) {\n await DatabaseClient.instance.close();\n DatabaseClient.instance = null;\n DatabaseClient.isConnected = false;\n logger.info(\"DatabaseClient: Connection closed\");\n }\n }\n\n static async sync(options?: { force?: boolean; alter?: boolean }): Promise<void> {\n if (!DatabaseClient.instance) {\n throw new Error(\n \"DatabaseClient: getInstance() must be called before sync()\",\n );\n }\n\n try {\n await DatabaseClient.instance.sync(options);\n logger.info(\"DatabaseClient: Models synced with database\", options);\n } catch (error) {\n logger.error(\"DatabaseClient: Failed to sync models\", error);\n throw error;\n }\n }\n\n\n static isConnectedToDatabase(): boolean {\n return DatabaseClient.isConnected;\n }\n\n\n static getSequelizeInstance(): Sequelize {\n if (!DatabaseClient.instance) {\n throw new Error(\n \"DatabaseClient: getInstance() must be called before getSequelizeInstance()\",\n );\n }\n return DatabaseClient.instance;\n }\n\n private static setupPoolMonitoring(): void {\n if (!DatabaseClient.instance) {\n return;\n }\n\n const pool = (DatabaseClient.instance as any).connectionManager?.pool;\n if (!pool) {\n logger.warn(\"DatabaseClient: Connection pool not available for monitoring\");\n return;\n }\n\n // Log pool stats every 60 seconds in production\n if (process.env.NODE_ENV === \"production\") {\n setInterval(() => {\n try {\n const stats = {\n size: pool.size,\n available: pool.available,\n using: pool.using,\n waiting: pool.waiting,\n };\n\n // Only log if pool is being used or has waiting requests\n if (stats.using > 0 || stats.waiting > 0) {\n logger.info(\"DatabaseClient: Pool stats\", stats);\n }\n\n // Warn if pool is near capacity\n if (stats.using >= pool.max * 0.8) {\n logger.warn(\"DatabaseClient: Pool usage high\", {\n ...stats,\n capacityPercent: Math.round((stats.using / pool.max) * 100),\n });\n }\n\n // Alert if requests are waiting\n if (stats.waiting > 0) {\n logger.error(\"DatabaseClient: Connections waiting for pool\", {\n ...stats,\n message: \"Consider increasing DB_POOL_MAX\",\n });\n }\n } catch (error) {\n logger.debug(\"DatabaseClient: Error reading pool stats\", error);\n }\n }, 60000); // Every 60 seconds\n }\n\n logger.info(\"DatabaseClient: Pool monitoring enabled\");\n }\n}\n"],"names":["Sequelize","Log","logger","getInstance","DatabaseClient","instance","isConnected","config","models","Error","poolConfig","max","DB_POOL_MAX","min","DB_POOL_MIN","acquire","DB_ACQUIRE_TIMEOUT","idle","DB_IDLE_TIMEOUT","evict","DB_EVICT_INTERVAL","options","dialect","dialectOptions","socketPath","URL","DATABASE_URL","hostname","pool","logging","msg","debug","define","timestamps","info","setupPoolMonitoring","length","addModels","authenticate","error","message","includes","recommendation","close","sync","isConnectedToDatabase","getSequelizeInstance","connectionManager","warn","process","env","NODE_ENV","setInterval","stats","size","available","using","waiting","capacityPercent","Math","round"],"mappings":"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"}
@@ -1,63 +0,0 @@
1
- import { Redis } from "ioredis";
2
- import { Log } from "../utils/Logger.js";
3
- const logger = Log.getInstance().extend("redis-client");
4
- export class RedisClient {
5
- static instance;
6
- constructor(){}
7
- static getInstance() {
8
- if (!RedisClient.instance) {
9
- const REDIS_HOST = process.env.REDIS_HOST || "localhost";
10
- const REDIS_PORT = process.env.REDIS_PORT || 6379;
11
- const options = {
12
- host: REDIS_HOST,
13
- port: Number(REDIS_PORT),
14
- maxRetriesPerRequest: null,
15
- enableAutoPipelining: true,
16
- connectTimeout: 5000,
17
- lazyConnect: false
18
- };
19
- RedisClient.instance = new Redis(options);
20
- RedisClient.instance.on("connect", ()=>{
21
- logger.info("Connected to Redis");
22
- });
23
- RedisClient.instance.on("error", (err)=>{
24
- logger.error("Redis error:", err);
25
- });
26
- logger.info(`Redis status: ${RedisClient.instance.status}`);
27
- }
28
- return RedisClient.instance;
29
- }
30
- static async get(key) {
31
- const client = this.getInstance();
32
- return client.get(key);
33
- }
34
- static async set(key, value, expirySeconds) {
35
- const client = this.getInstance();
36
- if (expirySeconds) {
37
- return client.set(key, value, "EX", expirySeconds);
38
- }
39
- return client.set(key, value);
40
- }
41
- static async del(key) {
42
- const client = this.getInstance();
43
- return client.del(key);
44
- }
45
- static async getJSON(key) {
46
- const raw = await this.get(key);
47
- return raw ? JSON.parse(raw) : null;
48
- }
49
- static async setJSON(key, value, expirySeconds) {
50
- return this.set(key, JSON.stringify(value), expirySeconds);
51
- }
52
- static async waitForFill(key, timeoutMs = 8000, pollMs = 150) {
53
- const start = Date.now();
54
- while(Date.now() - start < timeoutMs){
55
- const v = await this.getJSON(key);
56
- if (v) return v;
57
- await new Promise((r)=>setTimeout(r, pollMs));
58
- }
59
- return null;
60
- }
61
- }
62
-
63
- //# sourceMappingURL=Redis.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/classes/Redis.ts"],"sourcesContent":["import { Redis } from \"ioredis\";\nimport type { RedisOptions } from \"ioredis\";\nimport {Log} from \"../utils/Logger.js\";\n\nconst logger: Log = Log.getInstance().extend(\"redis-client\");\n\nexport class RedisClient {\n private static instance: Redis;\n\n private constructor() {}\n\n public static getInstance(): Redis {\n if (!RedisClient.instance) {\n const REDIS_HOST = process.env.REDIS_HOST || \"localhost\";\n const REDIS_PORT = process.env.REDIS_PORT || 6379;\n\n const options: RedisOptions = {\n host: REDIS_HOST,\n port: Number(REDIS_PORT),\n maxRetriesPerRequest: null,\n enableAutoPipelining: true,\n connectTimeout: 5000,\n lazyConnect: false,\n };\n\n RedisClient.instance = new Redis(options);\n\n RedisClient.instance.on(\"connect\", () => {\n logger.info(\"Connected to Redis\");\n });\n RedisClient.instance.on(\"error\", (err) => {\n logger.error(\"Redis error:\", err);\n });\n logger.info(`Redis status: ${RedisClient.instance.status}`);\n }\n return RedisClient.instance;\n }\n\n public static async get(key: string): Promise<string | null> {\n const client = this.getInstance();\n return client.get(key);\n }\n\n public static async set(\n key: string,\n value: string,\n expirySeconds?: number,\n ): Promise<string> {\n const client = this.getInstance();\n if (expirySeconds) {\n return client.set(key, value, \"EX\", expirySeconds);\n }\n return client.set(key, value);\n }\n\n public static async del(key: string): Promise<number> {\n const client = this.getInstance();\n return client.del(key);\n }\n\n public static async getJSON<T>(key: string): Promise<T | null> {\n const raw = await this.get(key);\n return raw ? (JSON.parse(raw) as T) : null;\n }\n\n public static async setJSON(\n key: string,\n value: any,\n expirySeconds?: number,\n ): Promise<string> {\n return this.set(key, JSON.stringify(value), expirySeconds);\n }\n\n\n public static async waitForFill<T>(\n key: string,\n timeoutMs = 8000,\n pollMs = 150,\n ): Promise<T | null> {\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n const v = await this.getJSON<T>(key);\n if (v) return v;\n await new Promise((r) => setTimeout(r, pollMs));\n }\n return null;\n }\n}"],"names":["Redis","Log","logger","getInstance","extend","RedisClient","instance","REDIS_HOST","process","env","REDIS_PORT","options","host","port","Number","maxRetriesPerRequest","enableAutoPipelining","connectTimeout","lazyConnect","on","info","err","error","status","get","key","client","set","value","expirySeconds","del","getJSON","raw","JSON","parse","setJSON","stringify","waitForFill","timeoutMs","pollMs","start","Date","now","v","Promise","r","setTimeout"],"mappings":"AAAA,SAASA,KAAK,QAAQ,UAAU;AAEhC,SAAQC,GAAG,QAAO,qBAAqB;AAEvC,MAAMC,SAAcD,IAAIE,WAAW,GAAGC,MAAM,CAAC;AAE7C,OAAO,MAAMC;IACT,OAAeC,SAAgB;IAE/B,aAAsB,CAAC;IAEvB,OAAcH,cAAqB;QAC/B,IAAI,CAACE,YAAYC,QAAQ,EAAE;YACvB,MAAMC,aAAaC,QAAQC,GAAG,CAACF,UAAU,IAAI;YAC7C,MAAMG,aAAaF,QAAQC,GAAG,CAACC,UAAU,IAAI;YAE7C,MAAMC,UAAwB;gBAC1BC,MAAML;gBACNM,MAAMC,OAAOJ;gBACbK,sBAAsB;gBACtBC,sBAAsB;gBACtBC,gBAAgB;gBAChBC,aAAa;YACjB;YAEAb,YAAYC,QAAQ,GAAG,IAAIN,MAAMW;YAEjCN,YAAYC,QAAQ,CAACa,EAAE,CAAC,WAAW;gBAC/BjB,OAAOkB,IAAI,CAAC;YAChB;YACAf,YAAYC,QAAQ,CAACa,EAAE,CAAC,SAAS,CAACE;gBAC9BnB,OAAOoB,KAAK,CAAC,gBAAgBD;YACjC;YACAnB,OAAOkB,IAAI,CAAC,CAAC,cAAc,EAAEf,YAAYC,QAAQ,CAACiB,MAAM,EAAE;QAC9D;QACA,OAAOlB,YAAYC,QAAQ;IAC/B;IAEA,aAAoBkB,IAAIC,GAAW,EAA0B;QACzD,MAAMC,SAAS,IAAI,CAACvB,WAAW;QAC/B,OAAOuB,OAAOF,GAAG,CAACC;IACtB;IAEA,aAAoBE,IAChBF,GAAW,EACXG,KAAa,EACbC,aAAsB,EACP;QACf,MAAMH,SAAS,IAAI,CAACvB,WAAW;QAC/B,IAAI0B,eAAe;YACf,OAAOH,OAAOC,GAAG,CAACF,KAAKG,OAAO,MAAMC;QACxC;QACA,OAAOH,OAAOC,GAAG,CAACF,KAAKG;IAC3B;IAEA,aAAoBE,IAAIL,GAAW,EAAmB;QAClD,MAAMC,SAAS,IAAI,CAACvB,WAAW;QAC/B,OAAOuB,OAAOI,GAAG,CAACL;IACtB;IAEA,aAAoBM,QAAWN,GAAW,EAAqB;QAC3D,MAAMO,MAAM,MAAM,IAAI,CAACR,GAAG,CAACC;QAC3B,OAAOO,MAAOC,KAAKC,KAAK,CAACF,OAAa;IAC1C;IAEA,aAAoBG,QAChBV,GAAW,EACXG,KAAU,EACVC,aAAsB,EACP;QACf,OAAO,IAAI,CAACF,GAAG,CAACF,KAAKQ,KAAKG,SAAS,CAACR,QAAQC;IAChD;IAGA,aAAoBQ,YAChBZ,GAAW,EACXa,YAAY,IAAI,EAChBC,SAAS,GAAG,EACK;QACjB,MAAMC,QAAQC,KAAKC,GAAG;QACtB,MAAOD,KAAKC,GAAG,KAAKF,QAAQF,UAAW;YACnC,MAAMK,IAAI,MAAM,IAAI,CAACZ,OAAO,CAAIN;YAChC,IAAIkB,GAAG,OAAOA;YACd,MAAM,IAAIC,QAAQ,CAACC,IAAMC,WAAWD,GAAGN;QAC3C;QACA,OAAO;IACX;AACJ"}