@yrpri/api 9.0.138 → 9.0.140

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 (320) hide show
  1. package/agents/assistants/agentAssistant.js +4 -3
  2. package/agents/assistants/baseAssistant.js +72 -71
  3. package/agents/assistants/baseAssistantWithVoice.js +6 -5
  4. package/agents/assistants/modes/agentDirectConnection.js +8 -7
  5. package/agents/assistants/modes/agentSelectionMode.js +2 -1
  6. package/agents/assistants/modes/baseAssistantMode.js +3 -2
  7. package/agents/assistants/modes/tools/agentTools.js +11 -10
  8. package/agents/assistants/modes/tools/loginTools.js +7 -6
  9. package/agents/assistants/modes/tools/models/agents.js +6 -5
  10. package/agents/assistants/modes/tools/models/subscriptions.js +7 -6
  11. package/agents/assistants/modes/tools/navigationTools.js +7 -6
  12. package/agents/assistants/modes/tools/subscriptionTools.js +12 -11
  13. package/agents/assistants/modes/tools/workflowConverstationTools.js +7 -6
  14. package/agents/assistants/voiceAssistant.js +45 -44
  15. package/agents/controllers/agentProductController.js +8 -7
  16. package/agents/controllers/agentSubscriptionController.js +13 -12
  17. package/agents/controllers/assistantsController.js +45 -44
  18. package/agents/controllers/policySynthAgents.d.ts +2 -0
  19. package/agents/controllers/policySynthAgents.js +63 -31
  20. package/agents/managers/emailInvitesManager.js +4 -3
  21. package/agents/managers/newAiModelSetup.js +57 -132
  22. package/agents/managers/notificationAgentQueueManager.js +55 -54
  23. package/agents/managers/subscriptionManager.js +24 -23
  24. package/agents/models/agentProduct.js +2 -1
  25. package/agents/models/agentProductBoosterPurchase.js +2 -1
  26. package/agents/models/testData/createEvolyAgentProduct.js +7 -6
  27. package/agents/models/testData/old/updateAgentWorkflowConfiguration.js +5 -4
  28. package/agents/models/testData/updateAgentWorkflowConfiguration.js +5 -4
  29. package/agents/tools/setTemplateWorkflowCommunityId.js +6 -5
  30. package/app.d.ts +2 -1
  31. package/app.js +60 -34
  32. package/authorization.cjs +4 -4
  33. package/controllers/allOurIdeas.js +45 -44
  34. package/controllers/groups.cjs +4 -9
  35. package/controllers/images.cjs +8 -8
  36. package/controllers/index.cjs +1 -1
  37. package/controllers/points.cjs +1 -1
  38. package/controllers/posts.cjs +3 -3
  39. package/deleteUnwantedDeclerations.cjs +5 -5
  40. package/models/community.cjs +1 -1
  41. package/models/domain.cjs +7 -7
  42. package/models/image.cjs +2 -2
  43. package/models/index.cjs +8 -4
  44. package/models/post.cjs +10 -10
  45. package/models/user.cjs +1 -1
  46. package/models/video.cjs +4 -4
  47. package/package.json +5 -5
  48. package/scripts/addRatingUsersToGroup.js +1 -1
  49. package/scripts/addUserToOrganization.js +8 -8
  50. package/scripts/agents/changeModelForWorkflowGroupTemplate.js +13 -12
  51. package/scripts/agents/generateAgentWorkflowTemplateFromAgentClass.js +8 -7
  52. package/scripts/analyseRatingsForCommunity.js +2 -2
  53. package/scripts/analyzeAndFixBrokenPointUsers.js +3 -3
  54. package/scripts/analyzeEndorsementsByCountry.js +7 -7
  55. package/scripts/analyzePostsForCommunity.js +1 -1
  56. package/scripts/bulkStatusUpdates/listUpdates.js +2 -2
  57. package/scripts/bulkStatusUpdates/mergeLatestPostsToUpdate.js +5 -5
  58. package/scripts/bulkStatusUpdates/performUpdate.js +9 -9
  59. package/scripts/bulkStatusUpdates/performUpdateForGroup.cjs +11 -11
  60. package/scripts/bulkStatusUpdates/performUpdateForStatus.js +15 -15
  61. package/scripts/change/changeVideoAspectTo.js +3 -3
  62. package/scripts/change/setUseNewVersion.cjs +4 -4
  63. package/scripts/changeCommunityGroupcount.js +3 -3
  64. package/scripts/changeCommunityPostCount.js +3 -3
  65. package/scripts/changeGroupPostCount.js +3 -3
  66. package/scripts/changeLanguage.js +4 -4
  67. package/scripts/changeOfficalStatus.js +3 -3
  68. package/scripts/cleanups/deleteAnonNotifications.cjs +7 -7
  69. package/scripts/cleanups/deleteLinkGroupsWithDeletedCommunities.js +8 -8
  70. package/scripts/cleanups/deleteYearOldNotifications.cjs +5 -5
  71. package/scripts/cleanups/removeAllUsersFromHiddenPublicGroup.js +5 -5
  72. package/scripts/clearAllEndorsementInGroup.js +5 -5
  73. package/scripts/cloning/clearUsersForCommunitiesFromUrl.js +3 -3
  74. package/scripts/cloning/cloneFromUrlScript.js +4 -4
  75. package/scripts/cloning/cloneWBFromUrlScriptAndCreateLinks.js +6 -6
  76. package/scripts/cloning/cloneWBFromUrlScriptNoUsersOrPoints.js +6 -6
  77. package/scripts/cloning/cloneWBSerbianFromUrlScriptAndCreateLinks.js +6 -6
  78. package/scripts/cloning/copyCommunityConfigAndTranslationsFromURL.js +3 -3
  79. package/scripts/cloning/copyCommunityOneGroupToDomainNoUsersNoEndorsements.js +2 -2
  80. package/scripts/cloning/copyCommunityToDomainNoUsersNoEndorsements.js +2 -2
  81. package/scripts/cloning/copyCommunityToDomainWithEverything.js +2 -2
  82. package/scripts/cloning/copyCommunityToDomainWithOnlyGroups.js +3 -3
  83. package/scripts/cloning/copyGroupConfigAndTranslationsFromURL.js +3 -3
  84. package/scripts/cloning/copyPostToGroupOld.js +12 -12
  85. package/scripts/cloning/copyPostVideosFromURL.js +3 -3
  86. package/scripts/cloning/copyPostWithOutAnyVotingOrActivities.js +2 -2
  87. package/scripts/cloning/deepCloneSerbianWBFromUrlScriptAndCreateLinks.js +7 -7
  88. package/scripts/cloning/deepCloneWBFromUrlScriptAndCreateLinks.js +6 -6
  89. package/scripts/cloning/setAdminsFromURL.js +5 -5
  90. package/scripts/cloning/setExternalIdsFromURL.js +3 -3
  91. package/scripts/countCommunity.js +11 -11
  92. package/scripts/countCommunityUsers.js +4 -4
  93. package/scripts/countDelayedNotifications.js +3 -3
  94. package/scripts/countGroup.js +11 -11
  95. package/scripts/countStuff.js +3 -3
  96. package/scripts/countUniqueVotersInAGroup.js +3 -3
  97. package/scripts/createInvitesAndShow.js +2 -2
  98. package/scripts/database/sync_database.js +2 -2
  99. package/scripts/database/sync_dev_database.js +3 -3
  100. package/scripts/debugNotifications.js +5 -5
  101. package/scripts/deleteAllNewsFeeds.js +2 -2
  102. package/scripts/deleteCategory.js +1 -1
  103. package/scripts/deleteOldAppActivities.js +5 -4
  104. package/scripts/deletePostContactDataForCommunity.js +5 -4
  105. package/scripts/destroy/destroy_all_but_one_domain.js +59 -59
  106. package/scripts/displayAuthorForPost.js +1 -1
  107. package/scripts/domains/createDomain.js +5 -4
  108. package/scripts/domains/importDomainsFromXls.js +7 -6
  109. package/scripts/endorsementFraudDetection/analyseEndorsementsForCommunity.js +2 -2
  110. package/scripts/endorsementFraudDetection/bulkDeleteDuplicateEndorsmentsFromUrl.js +9 -9
  111. package/scripts/exportAllStatusChanges.js +5 -5
  112. package/scripts/exportEndorsementsForCommunity.js +5 -5
  113. package/scripts/exportPointQualitiesForCommunity.js +5 -5
  114. package/scripts/exportPostsAndPointsForCommunity.js +9 -9
  115. package/scripts/exportPostsDataSetForDomain.js +12 -12
  116. package/scripts/exportPostsForGroup.js +7 -7
  117. package/scripts/exportRatingsForPost.js +2 -2
  118. package/scripts/exportUserEndorsementsWithUserAnalysis.js +6 -6
  119. package/scripts/exportUsersForCommunity.js +3 -3
  120. package/scripts/exportUsersForDomain.js +3 -3
  121. package/scripts/exportUsersForGroup.js +3 -3
  122. package/scripts/exports/ratingDistribution.js +6 -6
  123. package/scripts/exports/whoEndorsedWhatByCommunity.js +2 -2
  124. package/scripts/findUnusedClientImports.js +2 -2
  125. package/scripts/fixAllPostPointCounts.js +1 -1
  126. package/scripts/fixAnonNotificationsSettings.js +5 -5
  127. package/scripts/fixCountKopavogur.js +1 -1
  128. package/scripts/fixEndorsementsAfterCopyPostToGroup.js +10 -10
  129. package/scripts/fixExternalUserId.js +2 -2
  130. package/scripts/fixGroupAccess.js +3 -3
  131. package/scripts/fixGroupIdeasAndPointsCount.js +2 -2
  132. package/scripts/fixNotificationSettings.js +4 -4
  133. package/scripts/fixSurveyRadioBakedInSubCodes.js +6 -6
  134. package/scripts/fixWrongUserIdForStatusUpdates.js +6 -5
  135. package/scripts/gallery/exportGalleryData.js +2 -2
  136. package/scripts/gallery/importGalleryForCommunity.js +14 -14
  137. package/scripts/gallery/readJsonAndDownloadImagesVersion2.js +6 -6
  138. package/scripts/gallery/refreshAcApiPostIdsForCommunity.js +5 -5
  139. package/scripts/genderAnalysis.js +10 -10
  140. package/scripts/genderAnalysisByStatus.js +4 -4
  141. package/scripts/importAllLocalesFromLocalFolders.js +7 -7
  142. package/scripts/importDomain.js +131 -131
  143. package/scripts/keys/addOidcToDomain.cjs +9 -9
  144. package/scripts/landUseGame/export3Ddata.js +15 -15
  145. package/scripts/listLanguagesForGroup.js +6 -6
  146. package/scripts/loadTestCreateDummyContentForGroup.js +2 -2
  147. package/scripts/makeRecursiveMapData.js +4 -4
  148. package/scripts/mapping/community_map_csv.js +5 -5
  149. package/scripts/moveCommunityToDomain.js +3 -3
  150. package/scripts/moveGroupToCommunity.js +3 -3
  151. package/scripts/movePostToGroup.js +5 -5
  152. package/scripts/movePostsToGroupsRecountGroupFromUrl.js +6 -6
  153. package/scripts/oldMovePostToGroup.js +9 -9
  154. package/scripts/processCsvForPdfUrls.js +2 -2
  155. package/scripts/processCsvForTranslationAndToxicity.js +10 -10
  156. package/scripts/recount/recount_recursive_communities.js +6 -6
  157. package/scripts/recountALLCommunityGroupCounts.js +4 -4
  158. package/scripts/recountAll.js +3 -3
  159. package/scripts/recountCommunitesFromUrl.js +3 -3
  160. package/scripts/recountCommunity.js +2 -2
  161. package/scripts/recountGroup.js +5 -5
  162. package/scripts/recountGroupNoUserChange.js +5 -5
  163. package/scripts/resetAllEndorsementsForGroup.js +3 -3
  164. package/scripts/resetEnTranslationForGroup.js +5 -5
  165. package/scripts/setAdminOnAll.cjs +14 -14
  166. package/scripts/setDomainAdmin.cjs +6 -6
  167. package/scripts/setDomainLocales.js +2 -2
  168. package/scripts/setEarlQuestionIdOnGroup.cjs +4 -4
  169. package/scripts/setLanguageOnGroupCommunitesFromUrl.js +3 -3
  170. package/scripts/setMemberOfAll.js +14 -14
  171. package/scripts/setNewUserForContentOfCommunity.js +9 -9
  172. package/scripts/setOfficialStatusOnAllPostsForCommunity.js +1 -1
  173. package/scripts/setUserOnAll.js +14 -14
  174. package/scripts/showCategoryForGroup.js +1 -1
  175. package/scripts/showOldActivityTypes.js +3 -3
  176. package/scripts/showPostsMissingCategoryForGroup.js +2 -2
  177. package/scripts/showStatuses.js +4 -4
  178. package/scripts/showUniqueVotersInCommunity.js +4 -4
  179. package/scripts/showUserAgentsAndIpsForEmails.js +4 -4
  180. package/scripts/simpleExportForGroupsForCommunity.js +5 -5
  181. package/scripts/simpleExportForPointsForCommunity.js +5 -5
  182. package/scripts/simpleExportForPostsForCommunity.js +5 -5
  183. package/scripts/testForEndorsments.js +4 -4
  184. package/scripts/undeleteGroupAndAllContent.js +8 -8
  185. package/scripts/undeletePost.js +7 -7
  186. package/scripts/unlinkSsn.js +4 -4
  187. package/scripts/updateFromAlthingi.js +8 -8
  188. package/scripts/users/createUserAddDomain.js +6 -5
  189. package/scripts/users/importUsersForDomainsFromXls.js +4 -3
  190. package/scripts/users/listDomainUsersWithSsn.js +6 -5
  191. package/scripts/users/removeUserFromDomain.js +6 -5
  192. package/scripts/users/updatePasswordFromSsn.js +5 -4
  193. package/scripts/users/updateUserSsnFromEmail.js +5 -4
  194. package/services/controllers/activities.cjs +1 -1
  195. package/services/controllers/news_feeds.cjs +1 -1
  196. package/services/controllers/notifications.cjs +1 -1
  197. package/services/controllers/recommendations.cjs +1 -1
  198. package/services/engine/allOurIdeas/aiHelper.js +10 -9
  199. package/services/engine/analytics/export_anon_community_activities.js +3 -3
  200. package/services/engine/analytics/importer.js +10 -10
  201. package/services/engine/analytics/plausible/manager.cjs +4 -4
  202. package/services/engine/analytics/statsCalc.cjs +1 -1
  203. package/services/engine/analytics/utils.cjs +10 -10
  204. package/services/engine/moderation/fraud/CreateFraudAuditReport.cjs +2 -1
  205. package/services/engine/moderation/fraud/FraudBase.cjs +2 -2
  206. package/services/engine/moderation/fraud/FraudDeleteBase.cjs +4 -4
  207. package/services/engine/moderation/fraud/FraudGetBase.cjs +1 -1
  208. package/services/engine/moderation/fraud/FraudGetEndorsements.cjs +1 -1
  209. package/services/engine/moderation/fraud/FraudGetPointQualities.cjs +1 -1
  210. package/services/engine/moderation/fraud/FraudGetPoints.cjs +1 -1
  211. package/services/engine/moderation/fraud/FraudGetPosts.cjs +1 -1
  212. package/services/engine/moderation/fraud/FraudGetRatings.cjs +1 -1
  213. package/services/engine/moderation/fraud/FraudScannerNotifier.cjs +9 -9
  214. package/services/engine/moderation/get_moderation_items.cjs +1 -1
  215. package/services/engine/moderation/image_labeling/ImageLabelingBase.cjs +1 -1
  216. package/services/engine/moderation/process_moderation_items.cjs +1 -1
  217. package/services/engine/moderation/toxicity_analysis.cjs +1 -1
  218. package/services/engine/news_feeds/generate_dynamically.cjs +1 -1
  219. package/services/engine/news_feeds/generate_from_notifications.cjs +1 -1
  220. package/services/engine/notifications/emails_utils.cjs +2 -2
  221. package/services/engine/notifications/generate_point_notifications.cjs +1 -1
  222. package/services/engine/notifications/generate_post_notifications.cjs +1 -1
  223. package/services/engine/notifications/process_delayed_notifications.cjs +38 -38
  224. package/services/engine/old/exporters/categories_dataset.js +11 -11
  225. package/services/engine/old/exporters/sentiment_dataset.js +12 -12
  226. package/services/engine/recommendations/events_importer.cjs +5 -5
  227. package/services/engine/recommendations/events_manager.cjs +1 -1
  228. package/services/engine/reports/add_points_to_sheet.cjs +2 -2
  229. package/services/engine/reports/commonUtils.js +3 -2
  230. package/services/engine/reports/common_utils.cjs +8 -8
  231. package/services/engine/reports/docx_group_report.cjs +1 -1
  232. package/services/engine/reports/xlsAllOurIdeasExport.js +16 -15
  233. package/services/engine/reports/xls_community_users_report.cjs +2 -2
  234. package/services/engine/reports/xls_group_report.cjs +1 -1
  235. package/services/llms/baseChatBot.js +12 -11
  236. package/services/llms/imageGeneration/chatGptImageGenerator.js +3 -2
  237. package/services/llms/imageGeneration/collectionImageGenerator.js +7 -6
  238. package/services/llms/imageGeneration/dalleImageGenerator.js +6 -5
  239. package/services/llms/imageGeneration/fluxImageGenerator.js +5 -4
  240. package/services/llms/imageGeneration/imageProcessorService.js +2 -1
  241. package/services/llms/imageGeneration/imagenImageGenerator.js +8 -7
  242. package/services/llms/imageGeneration/s3Service.js +12 -11
  243. package/services/llms/llmTranslation.js +30 -29
  244. package/services/models/ac_activity.cjs +1 -1
  245. package/services/models/ac_notification.cjs +1 -1
  246. package/services/models/ac_translation_cache.cjs +11 -11
  247. package/services/scripts/analytics/setup_all_plausible_goals.cjs +2 -2
  248. package/services/scripts/fix_old_delayed_notifications.js +3 -3
  249. package/services/scripts/kue_status.js +11 -11
  250. package/services/scripts/kue_watch_stuck_jobs.js +6 -6
  251. package/services/scripts/translation_clear_language.js +21 -21
  252. package/services/scripts/translation_delete.js +4 -4
  253. package/services/scripts/translation_replace_text_from_url.js +4 -4
  254. package/services/scripts/translation_update.js +4 -4
  255. package/services/scripts/translations_list.js +5 -5
  256. package/services/utils/airbrake.cjs +2 -1
  257. package/services/utils/redisConnection.cjs +6 -5
  258. package/services/utils/translation_helpers.cjs +3 -2
  259. package/services/utils/updateAllLocalesFromEn.js +20 -19
  260. package/services/utils/updateLocaleFolders.js +7 -6
  261. package/services/workers/activity.cjs +1 -1
  262. package/services/workers/anonymizations.cjs +1 -1
  263. package/services/workers/bulk_status_update.cjs +2 -2
  264. package/services/workers/delayed_jobs.cjs +1 -1
  265. package/services/workers/deletions.cjs +1 -1
  266. package/services/workers/email.cjs +1 -1
  267. package/services/workers/fraud_management.cjs +3 -3
  268. package/services/workers/generativeAi.js +6 -5
  269. package/services/workers/main.cjs +1 -1
  270. package/services/workers/marketing.cjs +1 -1
  271. package/services/workers/moderation.cjs +1 -1
  272. package/services/workers/notification_delivery.cjs +1 -1
  273. package/services/workers/notification_news_feed.cjs +1 -1
  274. package/services/workers/queue.cjs +2 -2
  275. package/services/workers/recount.cjs +1 -1
  276. package/services/workers/reports.cjs +1 -1
  277. package/services/workers/similarities.cjs +4 -2
  278. package/services/workers/speech_to_text.cjs +1 -1
  279. package/utils/airbrake.cjs +1 -1
  280. package/utils/cjsCodeReview.js +7 -6
  281. package/utils/community_mapping_tools.cjs +2 -2
  282. package/utils/copy_utils.cjs +31 -31
  283. package/utils/export_utils.cjs +7 -7
  284. package/utils/generateDocumentation.js +10 -9
  285. package/utils/logger.cjs +2 -23
  286. package/utils/logger.d.cts +1 -1
  287. package/utils/loggerAirbrakeTransport.cjs +52 -0
  288. package/utils/loggerAirbrakeTransport.d.cts +15 -0
  289. package/utils/loggerAirbrakeTransportTs.d.ts +15 -0
  290. package/utils/loggerAirbrakeTransportTs.js +45 -0
  291. package/utils/loggerCore.cjs +29 -0
  292. package/utils/loggerCore.d.cts +2 -0
  293. package/utils/loggerCoreTs.d.ts +2 -0
  294. package/utils/loggerCoreTs.js +23 -0
  295. package/utils/loggerTs.d.ts +1 -2
  296. package/utils/loggerTs.js +2 -25
  297. package/utils/recount_utils.cjs +5 -5
  298. package/utils/seedModels.js +50 -49
  299. package/utils/sitemap_generator.cjs +4 -4
  300. package/utils/ypLanguages.js +2 -2
  301. package/webSockets.js +8 -7
  302. package/services/utils/logger.cjs +0 -25
  303. package/services/utils/logger.d.cts +0 -2
  304. package/src/agents/assistants/assistant.d.ts +0 -156
  305. package/src/controllers/audios.d.ts +0 -5
  306. package/src/controllers/categories.d.ts +0 -5
  307. package/src/controllers/communities.d.ts +0 -5
  308. package/src/controllers/domains.d.ts +0 -5
  309. package/src/controllers/groups.d.ts +0 -5
  310. package/src/controllers/images.d.ts +0 -5
  311. package/src/controllers/points.d.ts +0 -5
  312. package/src/controllers/posts.d.ts +0 -5
  313. package/src/controllers/ratings.d.ts +0 -5
  314. package/src/controllers/users.d.ts +0 -5
  315. package/src/controllers/videos.d.ts +0 -5
  316. package/src/models/index.d.ts +0 -84
  317. package/src/services/controllers/activities.d.ts +0 -5
  318. package/src/services/controllers/notifications.d.ts +0 -5
  319. package/src/utils/copy_utils.d.ts +0 -4
  320. package/src/utils/manifest_generator.d.ts +0 -18
package/utils/logger.cjs CHANGED
@@ -1,25 +1,4 @@
1
1
  "use strict";
2
- var bunyan = require('bunyan');
3
- var PrettyStream = require('bunyan-prettystream');
4
- var logger;
5
- if (process.env.USE_BUNYAN_LOGGER && process.env.NODE_ENV !== 'production') {
6
- var prettyStdOut = new PrettyStream();
7
- prettyStdOut.pipe(process.stdout);
8
- logger = bunyan.createLogger({
9
- name: 'yrpri',
10
- streams: [{
11
- level: 'debug',
12
- type: 'raw',
13
- stream: prettyStdOut
14
- }]
15
- });
16
- }
17
- else {
18
- if (process.env.USE_BUNYAN_LOGGER) {
19
- logger = bunyan.createLogger({ name: "your-priorities" });
20
- }
21
- else {
22
- logger = console;
23
- }
24
- }
2
+ const { buildLogger } = require("./loggerCore.cjs");
3
+ const logger = buildLogger();
25
4
  module.exports = logger;
@@ -1,2 +1,2 @@
1
1
  export = logger;
2
- declare var logger: any;
2
+ declare const logger: import("winston").Logger;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AirbrakeTransport = void 0;
7
+ const winston_transport_1 = __importDefault(require("winston-transport"));
8
+ const node_1 = require("@airbrake/node");
9
+ class AirbrakeTransport extends winston_transport_1.default {
10
+ constructor(opts) {
11
+ super(opts);
12
+ this.notifier = new node_1.Notifier({
13
+ projectId: opts.projectId,
14
+ projectKey: opts.projectKey,
15
+ environment: opts.environment ?? "production",
16
+ });
17
+ }
18
+ // Winston will call this for every log entry
19
+ log(info, callback) {
20
+ setImmediate(() => this.emit("logged", info)); // required boilerplate
21
+ const { level, message, ...meta } = info;
22
+ const err = info instanceof Error // user called logger.error(err)
23
+ ? info
24
+ : info.stack
25
+ ? Object.assign(new Error(message), { stack: info.stack })
26
+ : new Error(message);
27
+ if (process.env.AIRBRAKE_PROJECT_ID) {
28
+ this.notifier
29
+ .notify({
30
+ error: err,
31
+ context: { severity: this.toSeverity(level) },
32
+ params: meta,
33
+ })
34
+ .catch((err) => console.error("Airbrake notify failed:", err));
35
+ }
36
+ callback();
37
+ }
38
+ toSeverity(level) {
39
+ switch (level) {
40
+ case "error":
41
+ case "crit":
42
+ case "fatal":
43
+ return "error";
44
+ case "warn":
45
+ case "warning":
46
+ return "warning";
47
+ default:
48
+ return "info";
49
+ }
50
+ }
51
+ }
52
+ exports.AirbrakeTransport = AirbrakeTransport;
@@ -0,0 +1,15 @@
1
+ import Transport from "winston-transport";
2
+ import { LogEntry } from "winston";
3
+ export interface AirbrakeTransportOptions extends Transport.TransportStreamOptions {
4
+ projectId: number;
5
+ projectKey: string;
6
+ environment?: string;
7
+ }
8
+ export declare class AirbrakeTransport extends Transport {
9
+ private notifier;
10
+ constructor(opts: AirbrakeTransportOptions);
11
+ log(info: LogEntry & {
12
+ stack?: string;
13
+ }, callback: () => void): void;
14
+ private toSeverity;
15
+ }
@@ -0,0 +1,15 @@
1
+ import Transport from "winston-transport";
2
+ import { LogEntry } from "winston";
3
+ export interface AirbrakeTransportOptions extends Transport.TransportStreamOptions {
4
+ projectId: number;
5
+ projectKey: string;
6
+ environment?: string;
7
+ }
8
+ export declare class AirbrakeTransport extends Transport {
9
+ private notifier;
10
+ constructor(opts: AirbrakeTransportOptions);
11
+ log(info: LogEntry & {
12
+ stack?: string;
13
+ }, callback: () => void): void;
14
+ private toSeverity;
15
+ }
@@ -0,0 +1,45 @@
1
+ import Transport from "winston-transport";
2
+ import { Notifier } from "@airbrake/node";
3
+ export class AirbrakeTransport extends Transport {
4
+ constructor(opts) {
5
+ super(opts);
6
+ this.notifier = new Notifier({
7
+ projectId: opts.projectId,
8
+ projectKey: opts.projectKey,
9
+ environment: opts.environment ?? "production",
10
+ });
11
+ }
12
+ // Winston will call this for every log entry
13
+ log(info, callback) {
14
+ setImmediate(() => this.emit("logged", info)); // required boilerplate
15
+ const { level, message, ...meta } = info;
16
+ const err = info instanceof Error // user called logger.error(err)
17
+ ? info
18
+ : info.stack
19
+ ? Object.assign(new Error(message), { stack: info.stack })
20
+ : new Error(message);
21
+ if (process.env.AIRBRAKE_PROJECT_ID) {
22
+ this.notifier
23
+ .notify({
24
+ error: err,
25
+ context: { severity: this.toSeverity(level) },
26
+ params: meta,
27
+ })
28
+ .catch((err) => console.error("Airbrake notify failed:", err));
29
+ }
30
+ callback();
31
+ }
32
+ toSeverity(level) {
33
+ switch (level) {
34
+ case "error":
35
+ case "crit":
36
+ case "fatal":
37
+ return "error";
38
+ case "warn":
39
+ case "warning":
40
+ return "warning";
41
+ default:
42
+ return "info";
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildLogger = buildLogger;
7
+ // utils/loggerCore.ts (one single implementation)
8
+ const winston_1 = __importDefault(require("winston"));
9
+ const loggerAirbrakeTransport_cjs_1 = require("./loggerAirbrakeTransport.cjs");
10
+ function buildLogger() {
11
+ const transports = [
12
+ new winston_1.default.transports.Console({
13
+ format: winston_1.default.format.combine(winston_1.default.format.colorize(), winston_1.default.format.simple()),
14
+ }),
15
+ ];
16
+ if (process.env.AIRBRAKE_PROJECT_ID && process.env.AIRBRAKE_PROJECT_KEY) {
17
+ transports.push(new loggerAirbrakeTransport_cjs_1.AirbrakeTransport({
18
+ level: "error",
19
+ projectId: +process.env.AIRBRAKE_PROJECT_ID,
20
+ projectKey: process.env.AIRBRAKE_PROJECT_KEY,
21
+ environment: process.env.NODE_ENV,
22
+ }));
23
+ }
24
+ return winston_1.default.createLogger({
25
+ level: process.env.WINSTON_LOG_LEVEL ?? "debug",
26
+ format: winston_1.default.format.combine(winston_1.default.format.timestamp(), winston_1.default.format.errors({ stack: true }), winston_1.default.format.json()),
27
+ transports,
28
+ });
29
+ }
@@ -0,0 +1,2 @@
1
+ import winston from "winston";
2
+ export declare function buildLogger(): winston.Logger;
@@ -0,0 +1,2 @@
1
+ import winston from "winston";
2
+ export declare function buildLogger(): winston.Logger;
@@ -0,0 +1,23 @@
1
+ // utils/loggerCore.ts (one single implementation)
2
+ import winston from "winston";
3
+ import { AirbrakeTransport } from "./loggerAirbrakeTransportTs.js";
4
+ export function buildLogger() {
5
+ const transports = [
6
+ new winston.transports.Console({
7
+ format: winston.format.combine(winston.format.colorize(), winston.format.simple()),
8
+ }),
9
+ ];
10
+ if (process.env.AIRBRAKE_PROJECT_ID && process.env.AIRBRAKE_PROJECT_KEY) {
11
+ transports.push(new AirbrakeTransport({
12
+ level: "error",
13
+ projectId: +process.env.AIRBRAKE_PROJECT_ID,
14
+ projectKey: process.env.AIRBRAKE_PROJECT_KEY,
15
+ environment: process.env.NODE_ENV,
16
+ }));
17
+ }
18
+ return winston.createLogger({
19
+ level: process.env.WINSTON_LOG_LEVEL ?? "debug",
20
+ format: winston.format.combine(winston.format.timestamp(), winston.format.errors({ stack: true }), winston.format.json()),
21
+ transports,
22
+ });
23
+ }
@@ -1,3 +1,2 @@
1
- import * as bunyan from 'bunyan';
2
- declare let logger: bunyan;
1
+ export declare const logger: import("winston").Logger;
3
2
  export default logger;
package/utils/loggerTs.js CHANGED
@@ -1,26 +1,3 @@
1
- import * as bunyan from 'bunyan';
2
- import PrettyStream from 'bunyan-prettystream';
3
- let logger;
4
- if (process.env.USE_BUNYAN_LOGGER && process.env.NODE_ENV !== 'production') {
5
- const prettyStdOut = new PrettyStream();
6
- prettyStdOut.pipe(process.stdout);
7
- logger = bunyan.createLogger({
8
- name: 'yrpri',
9
- streams: [{
10
- level: 'debug',
11
- type: 'raw',
12
- stream: prettyStdOut
13
- }]
14
- });
15
- }
16
- else {
17
- if (process.env.USE_BUNYAN_LOGGER) {
18
- logger = bunyan.createLogger({ name: "your-priorities" });
19
- }
20
- else {
21
- // If you don't want to use any logger, you can assign 'console' to 'logger'.
22
- // However, you need to cast it to any as 'console' and 'bunyan' have different types.
23
- logger = console;
24
- }
25
- }
1
+ import { buildLogger } from "./loggerCoreTs.js";
2
+ export const logger = buildLogger();
26
3
  export default logger;
@@ -80,7 +80,7 @@ const recountPost = (postId, done) => {
80
80
  post.counter_endorsements_up = endorsementsCount;
81
81
  post.counter_endorsements_down = oppositionCount;
82
82
  post.save().then((results) => {
83
- console.log(`Recount for post ${post.id} done`);
83
+ log.info(`Recount for post ${post.id} done`);
84
84
  done();
85
85
  });
86
86
  }).catch((error) => {
@@ -134,7 +134,7 @@ const recountPoint = (pointId, done) => {
134
134
  point.counter_quality_up = counter_quality_up;
135
135
  point.counter_quality_down = counter_quality_down;
136
136
  point.save().then((results) => {
137
- console.log(`Recount for point ${point.id} done`);
137
+ log.info(`Recount for point ${point.id} done`);
138
138
  done();
139
139
  });
140
140
  }).catch((error) => {
@@ -332,7 +332,7 @@ const recountGroup = (groupId, callback) => {
332
332
  group.set('counter_users', Math.max(userCount, 1));
333
333
  group.set('counter_posts', postCount);
334
334
  group.save().then(() => {
335
- console.log(`Recount Group ${group.id} users: ${Math.max(userCount, 1)} posts: ${postCount} points: ${pointCount}`);
335
+ log.info(`Recount Group ${group.id} users: ${Math.max(userCount, 1)} posts: ${postCount} points: ${pointCount}`);
336
336
  callback(null, { postCount, pointCount, userCount, allUsers });
337
337
  }).catch(error => {
338
338
  callback(error);
@@ -388,7 +388,7 @@ const recountCommunity = (communityId, callback) => {
388
388
  community.set('counter_users', Math.max(_.uniq(allUsers).length, 1));
389
389
  community.set('counter_posts', postCount);
390
390
  community.save().then(() => {
391
- console.log(`Recount Community ${community.id} users: ${Math.max(_.uniq(allUsers).length, 1)} posts: ${postCount} points: ${pointCount}`);
391
+ log.info(`Recount Community ${community.id} users: ${Math.max(_.uniq(allUsers).length, 1)} posts: ${postCount} points: ${pointCount}`);
392
392
  callback();
393
393
  }).catch(error => {
394
394
  callback(error);
@@ -397,7 +397,7 @@ const recountCommunity = (communityId, callback) => {
397
397
  });
398
398
  }
399
399
  else {
400
- console.error(`Community ${communityId} found`);
400
+ log.error(`Community ${communityId} found`);
401
401
  callback();
402
402
  }
403
403
  }).catch(error => {
@@ -5,6 +5,7 @@ import crypto from "crypto";
5
5
  import bcrypt from "bcrypt";
6
6
  import { Sequelize, DataTypes, Op } from "sequelize";
7
7
  import { sequelize as psSequelize } from "@policysynth/agents/dbModels/index.js";
8
+ import log from "./loggerTs.js";
8
9
  const __filename = fileURLToPath(import.meta.url);
9
10
  const __dirname = path.dirname(__filename);
10
11
  // PolicySynth Models
@@ -53,7 +54,7 @@ const mainOperatorsAliases = {
53
54
  };
54
55
  if (env === "production") {
55
56
  if (!process.env.DATABASE_URL) {
56
- console.error("DATABASE_URL environment variable is not set for production.");
57
+ log.error("DATABASE_URL environment variable is not set for production.");
57
58
  process.exit(1);
58
59
  }
59
60
  if (process.env.DISABLE_PG_SSL) {
@@ -84,7 +85,7 @@ else {
84
85
  !process.env.YP_DEV_DATABASE_PASSWORD ||
85
86
  !process.env.YP_DEV_DATABASE_HOST ||
86
87
  !process.env.YP_DEV_DATABASE_PORT) {
87
- console.error("One or more YP_DEV_DATABASE environment variables are not set for development.");
88
+ log.error("One or more YP_DEV_DATABASE environment variables are not set for development.");
88
89
  process.exit(1);
89
90
  }
90
91
  try {
@@ -98,12 +99,12 @@ else {
98
99
  ssl: false,
99
100
  rejectUnauthorized: false,
100
101
  },
101
- logging: false, // Set to console.log for verbose output during seeding
102
+ logging: false, // Set to log.info for verbose output during seeding
102
103
  operatorsAliases: mainOperatorsAliases,
103
104
  });
104
105
  }
105
106
  catch (error) {
106
- console.error("Error initializing Sequelize for development:", error);
107
+ log.error("Error initializing Sequelize for development:", error);
107
108
  process.exit(1);
108
109
  }
109
110
  }
@@ -174,21 +175,21 @@ async function createMainCompoundIndexes(sequelizeInstance, indexCommands) {
174
175
  for (const command of indexCommands) {
175
176
  try {
176
177
  await sequelizeInstance.query(command);
177
- console.log(`Successfully created main index: ${command.substring(0, 100)}...`);
178
+ log.info(`Successfully created main index: ${command.substring(0, 100)}...`);
178
179
  }
179
180
  catch (error) {
180
181
  if (error.message && error.message.indexOf("already exists") > -1) {
181
- // console.log(`Main index already exists: ${command.substring(0,100)}...`);
182
+ // log.info(`Main index already exists: ${command.substring(0,100)}...`);
182
183
  }
183
184
  else {
184
- console.error(`Error creating main index with command: ${command}`);
185
- console.error(error.message);
185
+ log.error(`Error creating main index with command: ${command}`);
186
+ log.error(error.message);
186
187
  }
187
188
  }
188
189
  }
189
190
  }
190
191
  async function syncMainDatabase() {
191
- console.log("Starting main database synchronization...");
192
+ log.info("Starting main database synchronization...");
192
193
  const modelsPath = path.join(__dirname, "../models");
193
194
  const modelFiles = fs
194
195
  .readdirSync(modelsPath)
@@ -207,7 +208,7 @@ async function syncMainDatabase() {
207
208
  mainDb[model.name] = model;
208
209
  }
209
210
  catch (err) {
210
- console.error(`Error importing model ${file}:`, err);
211
+ log.error(`Error importing model ${file}:`, err);
211
212
  throw err; // Re-throw to stop the process if a model fails to load
212
213
  }
213
214
  }
@@ -229,13 +230,13 @@ async function syncMainDatabase() {
229
230
  mainDb[model.name] = model;
230
231
  }
231
232
  catch (err) {
232
- console.error(`Error importing services model ${file}:`, err);
233
+ log.error(`Error importing services model ${file}:`, err);
233
234
  throw err; // Re-throw to stop the process if a model fails to load
234
235
  }
235
236
  }
236
237
  }
237
238
  else {
238
- console.warn(`Directory not found, skipping services models: ${acModelsPath}`);
239
+ log.warn(`Directory not found, skipping services models: ${acModelsPath}`);
239
240
  }
240
241
  Object.keys(mainDb).forEach((modelName) => {
241
242
  if (mainDb[modelName] &&
@@ -245,50 +246,50 @@ async function syncMainDatabase() {
245
246
  });
246
247
  // This script is intended for creating a new database, so always force sync.
247
248
  await mainSequelize.sync({ force: true });
248
- console.log("Main database schema forcefully synchronized (tables dropped and recreated).");
249
+ log.info("Main database schema forcefully synchronized (tables dropped and recreated).");
249
250
  await createMainCompoundIndexes(mainSequelize, mainCompoundIndexCommands);
250
251
  if (mainDb.Post && typeof mainDb.Post.addFullTextIndex === "function") {
251
- console.log("Adding full text index for Post model...");
252
+ log.info("Adding full text index for Post model...");
252
253
  await mainDb.Post.addFullTextIndex();
253
- console.log("Full text index for Post model added.");
254
+ log.info("Full text index for Post model added.");
254
255
  }
255
256
  else {
256
- console.warn("Post model or addFullTextIndex method not found in mainDb. Skipping full text index.");
257
+ log.warn("Post model or addFullTextIndex method not found in mainDb. Skipping full text index.");
257
258
  }
258
- console.log("Main database synchronization finished.");
259
+ log.info("Main database synchronization finished.");
259
260
  }
260
261
  async function syncPolicySynthDatabase() {
261
- console.log("Starting PolicySynth database synchronization...");
262
+ log.info("Starting PolicySynth database synchronization...");
262
263
  try {
263
264
  // This script is intended for creating a new database, so always force sync.
264
265
  await psSequelize.sync({ force: false });
265
- console.log("PolicySynth database schema forcefully synchronized (tables dropped and recreated).");
266
- console.log("Associating PolicySynth models...");
266
+ log.info("PolicySynth database schema forcefully synchronized (tables dropped and recreated).");
267
+ log.info("Associating PolicySynth models...");
267
268
  for (const modelName of Object.keys(psModels)) {
268
269
  const model = psModels[modelName];
269
270
  if (model && typeof model.associate === "function") {
270
271
  model.associate(psSequelize.models);
271
272
  }
272
273
  }
273
- console.log("PolicySynth models associated successfully.");
274
+ log.info("PolicySynth models associated successfully.");
274
275
  }
275
276
  catch (error) {
276
- console.error("Error during PolicySynth database synchronization:", error);
277
+ log.error("Error during PolicySynth database synchronization:", error);
277
278
  process.exit(1);
278
279
  }
279
- console.log("PolicySynth database synchronization finished.");
280
+ log.info("PolicySynth database synchronization finished.");
280
281
  }
281
282
  async function seedAllModels() {
282
- console.log("--- Starting Database Seeding and Synchronization ---");
283
- console.log("NOTE: This script will forcefully synchronize the database (drop and recreate tables).");
284
- console.log("NODE_ENV:", env);
283
+ log.info("--- Starting Database Seeding and Synchronization ---");
284
+ log.info("NOTE: This script will forcefully synchronize the database (drop and recreate tables).");
285
+ log.info("NODE_ENV:", env);
285
286
  // The following environment variables are logged for informational purposes,
286
287
  // but this script will always force database synchronization.
287
- console.log("FORCE_DB_SYNC (ignored, always true for this script):", process.env.FORCE_DB_SYNC);
288
- console.log("FORCE_DB_INDEX_SYNC (ignored, indexes created after forced sync):", process.env.FORCE_DB_INDEX_SYNC);
288
+ log.info("FORCE_DB_SYNC (ignored, always true for this script):", process.env.FORCE_DB_SYNC);
289
+ log.info("FORCE_DB_INDEX_SYNC (ignored, indexes created after forced sync):", process.env.FORCE_DB_INDEX_SYNC);
289
290
  const args = process.argv.slice(2);
290
291
  if (args.length < 2) {
291
- console.error("Usage: node <script_path> <username/email> <password>");
292
+ log.error("Usage: node <script_path> <username/email> <password>");
292
293
  process.exit(1);
293
294
  }
294
295
  const userEmail = args[0].toLowerCase();
@@ -301,31 +302,31 @@ async function seedAllModels() {
301
302
  !process.env.YP_DEV_DATABASE_PASSWORD ||
302
303
  !process.env.YP_DEV_DATABASE_HOST ||
303
304
  !process.env.YP_DEV_DATABASE_PORT) {
304
- console.error("Missing YP_DEV_DATABASE environment variables for main database in non-production.");
305
+ log.error("Missing YP_DEV_DATABASE environment variables for main database in non-production.");
305
306
  process.exit(1);
306
307
  }
307
308
  }
308
309
  else {
309
310
  if (!process.env.DATABASE_URL) {
310
- console.error("Missing DATABASE_URL for production environment.");
311
+ log.error("Missing DATABASE_URL for production environment.");
311
312
  process.exit(1);
312
313
  }
313
314
  }
314
315
  try {
315
316
  await syncMainDatabase();
316
317
  await syncPolicySynthDatabase();
317
- console.log("--- Databases Synchronized ---");
318
- console.log("--- Creating User and Domain ---");
318
+ log.info("--- Databases Synchronized ---");
319
+ log.info("--- Creating User and Domain ---");
319
320
  if (!mainDb.User) {
320
- console.error("User model (mainDb.User) not found after sync.");
321
+ log.error("User model (mainDb.User) not found after sync.");
321
322
  process.exit(1);
322
323
  }
323
324
  if (!mainDb.Domain) {
324
- console.error("Domain model (mainDb.Domain) not found after sync.");
325
+ log.error("Domain model (mainDb.Domain) not found after sync.");
325
326
  process.exit(1);
326
327
  }
327
328
  // Create User
328
- console.log(`Attempting to create user: ${userEmail}`);
329
+ log.info(`Attempting to create user: ${userEmail}`);
329
330
  const newUser = mainDb.User.build({
330
331
  email: userEmail,
331
332
  name: userName, // Or a dedicated name argument if preferred
@@ -339,10 +340,10 @@ async function seedAllModels() {
339
340
  const salt = bcrypt.genSaltSync(10);
340
341
  newUser.encrypted_password = bcrypt.hashSync(userPassword, salt);
341
342
  await newUser.save();
342
- console.log(`User ${newUser.email} created with ID: ${newUser.id}`);
343
+ log.info(`User ${newUser.email} created with ID: ${newUser.id}`);
343
344
  // Create Domain
344
345
  const randomDomainName = crypto.randomBytes(8).toString("hex") + ".seed.local"; // Shorter and identifiable
345
- console.log(`Attempting to create domain: ${randomDomainName} for user ${newUser.id}`);
346
+ log.info(`Attempting to create domain: ${randomDomainName} for user ${newUser.id}`);
346
347
  const newDomain = mainDb.Domain.build({
347
348
  name: `Default Domain for ${userName}`,
348
349
  domain_name: randomDomainName,
@@ -363,39 +364,39 @@ async function seedAllModels() {
363
364
  // deleted: false, (already defaults to false)
364
365
  });
365
366
  await newDomain.save();
366
- console.log(`Domain ${newDomain.name} created with ID: ${newDomain.id} and domain_name: ${newDomain.domain_name}`);
367
+ log.info(`Domain ${newDomain.name} created with ID: ${newDomain.id} and domain_name: ${newDomain.domain_name}`);
367
368
  // Associate User with Domain
368
369
  if (typeof newDomain.addDomainUsers === "function") {
369
370
  await newDomain.addDomainUsers(newUser);
370
- console.log(`User ${newUser.email} added to domain ${newDomain.domain_name} as a user.`);
371
+ log.info(`User ${newUser.email} added to domain ${newDomain.domain_name} as a user.`);
371
372
  }
372
373
  else {
373
- console.warn(`newDomain.addDomainUsers is not a function. Skipping adding user to domain users.`);
374
+ log.warn(`newDomain.addDomainUsers is not a function. Skipping adding user to domain users.`);
374
375
  }
375
376
  if (typeof newDomain.addDomainAdmins === "function") {
376
377
  await newDomain.addDomainAdmins(newUser);
377
- console.log(`User ${newUser.email} added to domain ${newDomain.domain_name} as an admin.`);
378
+ log.info(`User ${newUser.email} added to domain ${newDomain.domain_name} as an admin.`);
378
379
  }
379
380
  else {
380
- console.warn(`newDomain.addDomainAdmins is not a function. Skipping adding user to domain admins.`);
381
+ log.warn(`newDomain.addDomainAdmins is not a function. Skipping adding user to domain admins.`);
381
382
  }
382
- console.log("--- User and Domain Creation Complete ---");
383
- console.log("--- All model seeding and synchronization complete. ---");
383
+ log.info("--- User and Domain Creation Complete ---");
384
+ log.info("--- All model seeding and synchronization complete. ---");
384
385
  process.exit(0);
385
386
  }
386
387
  catch (error) {
387
- console.error("Unhandled error during seeding process:", error);
388
+ log.error("Unhandled error during seeding process:", error);
388
389
  process.exit(1);
389
390
  }
390
391
  finally {
391
- console.log("Closing database connections...");
392
+ log.info("Closing database connections...");
392
393
  await mainSequelize.close();
393
394
  await psSequelize.close();
394
- console.log("Database connections closed.");
395
+ log.info("Database connections closed.");
395
396
  }
396
397
  }
397
398
  seedAllModels().catch((error) => {
398
- console.error("Fatal error running seedAllModels:", error);
399
+ log.error("Fatal error running seedAllModels:", error);
399
400
  process.exit(1);
400
401
  });
401
402
  export { seedAllModels }; // Export if you plan to import and run this elsewhere
@@ -49,7 +49,7 @@ var generateSitemap = async function (req, res) {
49
49
  cacheTime: 1,
50
50
  });
51
51
  let links = [];
52
- console.log(`generateSitemap ${domainName} ${community ? community.hostname : "noHostname"} `);
52
+ log.info(`generateSitemap ${domainName} ${community ? community.hostname : "noHostname"} `);
53
53
  async.series([
54
54
  function (seriesCallback) {
55
55
  if (community && wildCardDomainNames.indexOf(domainName) > -1) {
@@ -75,7 +75,7 @@ var generateSitemap = async function (req, res) {
75
75
  .then(function (communities) {
76
76
  _.forEach(communities, function (community) {
77
77
  if (!community) {
78
- console.error("No community found in sitemap generation");
78
+ log.error("No community found in sitemap generation");
79
79
  return;
80
80
  }
81
81
  const path = "/community/" + community.id;
@@ -145,7 +145,7 @@ var generateSitemap = async function (req, res) {
145
145
  .then(function (groups) {
146
146
  _.forEach(groups, function (group) {
147
147
  if (!group) {
148
- console.error("No group found in sitemap generation");
148
+ log.error("No group found in sitemap generation");
149
149
  return;
150
150
  }
151
151
  const path = "/group/" + group.id;
@@ -232,7 +232,7 @@ var generateSitemap = async function (req, res) {
232
232
  .then(function (posts) {
233
233
  _.forEach(posts, function (post) {
234
234
  if (!post) {
235
- console.error("No post found in sitemap generation");
235
+ log.error("No post found in sitemap generation");
236
236
  return;
237
237
  }
238
238
  links.push({ url: "/post/" + post.id });
@@ -13,7 +13,7 @@ export class YpLanguages {
13
13
  allLanguages.push(language);
14
14
  }
15
15
  else {
16
- //console.log("additionaLanguage already exists:", language.code);
16
+ //log.info("additionaLanguage already exists:", language.code);
17
17
  }
18
18
  });
19
19
  YpLanguages.googleTranslateLanguages.map((language) => {
@@ -21,7 +21,7 @@ export class YpLanguages {
21
21
  allLanguages.push(language);
22
22
  }
23
23
  else {
24
- //console.log("googleTranslateLanguages already exists:", language.code);
24
+ //log.info("googleTranslateLanguages already exists:", language.code);
25
25
  }
26
26
  });
27
27
  return allLanguages;