@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.
- package/agents/assistants/agentAssistant.js +4 -3
- package/agents/assistants/baseAssistant.js +72 -71
- package/agents/assistants/baseAssistantWithVoice.js +6 -5
- package/agents/assistants/modes/agentDirectConnection.js +8 -7
- package/agents/assistants/modes/agentSelectionMode.js +2 -1
- package/agents/assistants/modes/baseAssistantMode.js +3 -2
- package/agents/assistants/modes/tools/agentTools.js +11 -10
- package/agents/assistants/modes/tools/loginTools.js +7 -6
- package/agents/assistants/modes/tools/models/agents.js +6 -5
- package/agents/assistants/modes/tools/models/subscriptions.js +7 -6
- package/agents/assistants/modes/tools/navigationTools.js +7 -6
- package/agents/assistants/modes/tools/subscriptionTools.js +12 -11
- package/agents/assistants/modes/tools/workflowConverstationTools.js +7 -6
- package/agents/assistants/voiceAssistant.js +45 -44
- package/agents/controllers/agentProductController.js +8 -7
- package/agents/controllers/agentSubscriptionController.js +13 -12
- package/agents/controllers/assistantsController.js +45 -44
- package/agents/controllers/policySynthAgents.d.ts +2 -0
- package/agents/controllers/policySynthAgents.js +63 -31
- package/agents/managers/emailInvitesManager.js +4 -3
- package/agents/managers/newAiModelSetup.js +57 -132
- package/agents/managers/notificationAgentQueueManager.js +55 -54
- package/agents/managers/subscriptionManager.js +24 -23
- package/agents/models/agentProduct.js +2 -1
- package/agents/models/agentProductBoosterPurchase.js +2 -1
- package/agents/models/testData/createEvolyAgentProduct.js +7 -6
- package/agents/models/testData/old/updateAgentWorkflowConfiguration.js +5 -4
- package/agents/models/testData/updateAgentWorkflowConfiguration.js +5 -4
- package/agents/tools/setTemplateWorkflowCommunityId.js +6 -5
- package/app.d.ts +2 -1
- package/app.js +60 -34
- package/authorization.cjs +4 -4
- package/controllers/allOurIdeas.js +45 -44
- package/controllers/groups.cjs +4 -9
- package/controllers/images.cjs +8 -8
- package/controllers/index.cjs +1 -1
- package/controllers/points.cjs +1 -1
- package/controllers/posts.cjs +3 -3
- package/deleteUnwantedDeclerations.cjs +5 -5
- package/models/community.cjs +1 -1
- package/models/domain.cjs +7 -7
- package/models/image.cjs +2 -2
- package/models/index.cjs +8 -4
- package/models/post.cjs +10 -10
- package/models/user.cjs +1 -1
- package/models/video.cjs +4 -4
- package/package.json +5 -5
- package/scripts/addRatingUsersToGroup.js +1 -1
- package/scripts/addUserToOrganization.js +8 -8
- package/scripts/agents/changeModelForWorkflowGroupTemplate.js +13 -12
- package/scripts/agents/generateAgentWorkflowTemplateFromAgentClass.js +8 -7
- package/scripts/analyseRatingsForCommunity.js +2 -2
- package/scripts/analyzeAndFixBrokenPointUsers.js +3 -3
- package/scripts/analyzeEndorsementsByCountry.js +7 -7
- package/scripts/analyzePostsForCommunity.js +1 -1
- package/scripts/bulkStatusUpdates/listUpdates.js +2 -2
- package/scripts/bulkStatusUpdates/mergeLatestPostsToUpdate.js +5 -5
- package/scripts/bulkStatusUpdates/performUpdate.js +9 -9
- package/scripts/bulkStatusUpdates/performUpdateForGroup.cjs +11 -11
- package/scripts/bulkStatusUpdates/performUpdateForStatus.js +15 -15
- package/scripts/change/changeVideoAspectTo.js +3 -3
- package/scripts/change/setUseNewVersion.cjs +4 -4
- package/scripts/changeCommunityGroupcount.js +3 -3
- package/scripts/changeCommunityPostCount.js +3 -3
- package/scripts/changeGroupPostCount.js +3 -3
- package/scripts/changeLanguage.js +4 -4
- package/scripts/changeOfficalStatus.js +3 -3
- package/scripts/cleanups/deleteAnonNotifications.cjs +7 -7
- package/scripts/cleanups/deleteLinkGroupsWithDeletedCommunities.js +8 -8
- package/scripts/cleanups/deleteYearOldNotifications.cjs +5 -5
- package/scripts/cleanups/removeAllUsersFromHiddenPublicGroup.js +5 -5
- package/scripts/clearAllEndorsementInGroup.js +5 -5
- package/scripts/cloning/clearUsersForCommunitiesFromUrl.js +3 -3
- package/scripts/cloning/cloneFromUrlScript.js +4 -4
- package/scripts/cloning/cloneWBFromUrlScriptAndCreateLinks.js +6 -6
- package/scripts/cloning/cloneWBFromUrlScriptNoUsersOrPoints.js +6 -6
- package/scripts/cloning/cloneWBSerbianFromUrlScriptAndCreateLinks.js +6 -6
- package/scripts/cloning/copyCommunityConfigAndTranslationsFromURL.js +3 -3
- package/scripts/cloning/copyCommunityOneGroupToDomainNoUsersNoEndorsements.js +2 -2
- package/scripts/cloning/copyCommunityToDomainNoUsersNoEndorsements.js +2 -2
- package/scripts/cloning/copyCommunityToDomainWithEverything.js +2 -2
- package/scripts/cloning/copyCommunityToDomainWithOnlyGroups.js +3 -3
- package/scripts/cloning/copyGroupConfigAndTranslationsFromURL.js +3 -3
- package/scripts/cloning/copyPostToGroupOld.js +12 -12
- package/scripts/cloning/copyPostVideosFromURL.js +3 -3
- package/scripts/cloning/copyPostWithOutAnyVotingOrActivities.js +2 -2
- package/scripts/cloning/deepCloneSerbianWBFromUrlScriptAndCreateLinks.js +7 -7
- package/scripts/cloning/deepCloneWBFromUrlScriptAndCreateLinks.js +6 -6
- package/scripts/cloning/setAdminsFromURL.js +5 -5
- package/scripts/cloning/setExternalIdsFromURL.js +3 -3
- package/scripts/countCommunity.js +11 -11
- package/scripts/countCommunityUsers.js +4 -4
- package/scripts/countDelayedNotifications.js +3 -3
- package/scripts/countGroup.js +11 -11
- package/scripts/countStuff.js +3 -3
- package/scripts/countUniqueVotersInAGroup.js +3 -3
- package/scripts/createInvitesAndShow.js +2 -2
- package/scripts/database/sync_database.js +2 -2
- package/scripts/database/sync_dev_database.js +3 -3
- package/scripts/debugNotifications.js +5 -5
- package/scripts/deleteAllNewsFeeds.js +2 -2
- package/scripts/deleteCategory.js +1 -1
- package/scripts/deleteOldAppActivities.js +5 -4
- package/scripts/deletePostContactDataForCommunity.js +5 -4
- package/scripts/destroy/destroy_all_but_one_domain.js +59 -59
- package/scripts/displayAuthorForPost.js +1 -1
- package/scripts/domains/createDomain.js +5 -4
- package/scripts/domains/importDomainsFromXls.js +7 -6
- package/scripts/endorsementFraudDetection/analyseEndorsementsForCommunity.js +2 -2
- package/scripts/endorsementFraudDetection/bulkDeleteDuplicateEndorsmentsFromUrl.js +9 -9
- package/scripts/exportAllStatusChanges.js +5 -5
- package/scripts/exportEndorsementsForCommunity.js +5 -5
- package/scripts/exportPointQualitiesForCommunity.js +5 -5
- package/scripts/exportPostsAndPointsForCommunity.js +9 -9
- package/scripts/exportPostsDataSetForDomain.js +12 -12
- package/scripts/exportPostsForGroup.js +7 -7
- package/scripts/exportRatingsForPost.js +2 -2
- package/scripts/exportUserEndorsementsWithUserAnalysis.js +6 -6
- package/scripts/exportUsersForCommunity.js +3 -3
- package/scripts/exportUsersForDomain.js +3 -3
- package/scripts/exportUsersForGroup.js +3 -3
- package/scripts/exports/ratingDistribution.js +6 -6
- package/scripts/exports/whoEndorsedWhatByCommunity.js +2 -2
- package/scripts/findUnusedClientImports.js +2 -2
- package/scripts/fixAllPostPointCounts.js +1 -1
- package/scripts/fixAnonNotificationsSettings.js +5 -5
- package/scripts/fixCountKopavogur.js +1 -1
- package/scripts/fixEndorsementsAfterCopyPostToGroup.js +10 -10
- package/scripts/fixExternalUserId.js +2 -2
- package/scripts/fixGroupAccess.js +3 -3
- package/scripts/fixGroupIdeasAndPointsCount.js +2 -2
- package/scripts/fixNotificationSettings.js +4 -4
- package/scripts/fixSurveyRadioBakedInSubCodes.js +6 -6
- package/scripts/fixWrongUserIdForStatusUpdates.js +6 -5
- package/scripts/gallery/exportGalleryData.js +2 -2
- package/scripts/gallery/importGalleryForCommunity.js +14 -14
- package/scripts/gallery/readJsonAndDownloadImagesVersion2.js +6 -6
- package/scripts/gallery/refreshAcApiPostIdsForCommunity.js +5 -5
- package/scripts/genderAnalysis.js +10 -10
- package/scripts/genderAnalysisByStatus.js +4 -4
- package/scripts/importAllLocalesFromLocalFolders.js +7 -7
- package/scripts/importDomain.js +131 -131
- package/scripts/keys/addOidcToDomain.cjs +9 -9
- package/scripts/landUseGame/export3Ddata.js +15 -15
- package/scripts/listLanguagesForGroup.js +6 -6
- package/scripts/loadTestCreateDummyContentForGroup.js +2 -2
- package/scripts/makeRecursiveMapData.js +4 -4
- package/scripts/mapping/community_map_csv.js +5 -5
- package/scripts/moveCommunityToDomain.js +3 -3
- package/scripts/moveGroupToCommunity.js +3 -3
- package/scripts/movePostToGroup.js +5 -5
- package/scripts/movePostsToGroupsRecountGroupFromUrl.js +6 -6
- package/scripts/oldMovePostToGroup.js +9 -9
- package/scripts/processCsvForPdfUrls.js +2 -2
- package/scripts/processCsvForTranslationAndToxicity.js +10 -10
- package/scripts/recount/recount_recursive_communities.js +6 -6
- package/scripts/recountALLCommunityGroupCounts.js +4 -4
- package/scripts/recountAll.js +3 -3
- package/scripts/recountCommunitesFromUrl.js +3 -3
- package/scripts/recountCommunity.js +2 -2
- package/scripts/recountGroup.js +5 -5
- package/scripts/recountGroupNoUserChange.js +5 -5
- package/scripts/resetAllEndorsementsForGroup.js +3 -3
- package/scripts/resetEnTranslationForGroup.js +5 -5
- package/scripts/setAdminOnAll.cjs +14 -14
- package/scripts/setDomainAdmin.cjs +6 -6
- package/scripts/setDomainLocales.js +2 -2
- package/scripts/setEarlQuestionIdOnGroup.cjs +4 -4
- package/scripts/setLanguageOnGroupCommunitesFromUrl.js +3 -3
- package/scripts/setMemberOfAll.js +14 -14
- package/scripts/setNewUserForContentOfCommunity.js +9 -9
- package/scripts/setOfficialStatusOnAllPostsForCommunity.js +1 -1
- package/scripts/setUserOnAll.js +14 -14
- package/scripts/showCategoryForGroup.js +1 -1
- package/scripts/showOldActivityTypes.js +3 -3
- package/scripts/showPostsMissingCategoryForGroup.js +2 -2
- package/scripts/showStatuses.js +4 -4
- package/scripts/showUniqueVotersInCommunity.js +4 -4
- package/scripts/showUserAgentsAndIpsForEmails.js +4 -4
- package/scripts/simpleExportForGroupsForCommunity.js +5 -5
- package/scripts/simpleExportForPointsForCommunity.js +5 -5
- package/scripts/simpleExportForPostsForCommunity.js +5 -5
- package/scripts/testForEndorsments.js +4 -4
- package/scripts/undeleteGroupAndAllContent.js +8 -8
- package/scripts/undeletePost.js +7 -7
- package/scripts/unlinkSsn.js +4 -4
- package/scripts/updateFromAlthingi.js +8 -8
- package/scripts/users/createUserAddDomain.js +6 -5
- package/scripts/users/importUsersForDomainsFromXls.js +4 -3
- package/scripts/users/listDomainUsersWithSsn.js +6 -5
- package/scripts/users/removeUserFromDomain.js +6 -5
- package/scripts/users/updatePasswordFromSsn.js +5 -4
- package/scripts/users/updateUserSsnFromEmail.js +5 -4
- package/services/controllers/activities.cjs +1 -1
- package/services/controllers/news_feeds.cjs +1 -1
- package/services/controllers/notifications.cjs +1 -1
- package/services/controllers/recommendations.cjs +1 -1
- package/services/engine/allOurIdeas/aiHelper.js +10 -9
- package/services/engine/analytics/export_anon_community_activities.js +3 -3
- package/services/engine/analytics/importer.js +10 -10
- package/services/engine/analytics/plausible/manager.cjs +4 -4
- package/services/engine/analytics/statsCalc.cjs +1 -1
- package/services/engine/analytics/utils.cjs +10 -10
- package/services/engine/moderation/fraud/CreateFraudAuditReport.cjs +2 -1
- package/services/engine/moderation/fraud/FraudBase.cjs +2 -2
- package/services/engine/moderation/fraud/FraudDeleteBase.cjs +4 -4
- package/services/engine/moderation/fraud/FraudGetBase.cjs +1 -1
- package/services/engine/moderation/fraud/FraudGetEndorsements.cjs +1 -1
- package/services/engine/moderation/fraud/FraudGetPointQualities.cjs +1 -1
- package/services/engine/moderation/fraud/FraudGetPoints.cjs +1 -1
- package/services/engine/moderation/fraud/FraudGetPosts.cjs +1 -1
- package/services/engine/moderation/fraud/FraudGetRatings.cjs +1 -1
- package/services/engine/moderation/fraud/FraudScannerNotifier.cjs +9 -9
- package/services/engine/moderation/get_moderation_items.cjs +1 -1
- package/services/engine/moderation/image_labeling/ImageLabelingBase.cjs +1 -1
- package/services/engine/moderation/process_moderation_items.cjs +1 -1
- package/services/engine/moderation/toxicity_analysis.cjs +1 -1
- package/services/engine/news_feeds/generate_dynamically.cjs +1 -1
- package/services/engine/news_feeds/generate_from_notifications.cjs +1 -1
- package/services/engine/notifications/emails_utils.cjs +2 -2
- package/services/engine/notifications/generate_point_notifications.cjs +1 -1
- package/services/engine/notifications/generate_post_notifications.cjs +1 -1
- package/services/engine/notifications/process_delayed_notifications.cjs +38 -38
- package/services/engine/old/exporters/categories_dataset.js +11 -11
- package/services/engine/old/exporters/sentiment_dataset.js +12 -12
- package/services/engine/recommendations/events_importer.cjs +5 -5
- package/services/engine/recommendations/events_manager.cjs +1 -1
- package/services/engine/reports/add_points_to_sheet.cjs +2 -2
- package/services/engine/reports/commonUtils.js +3 -2
- package/services/engine/reports/common_utils.cjs +8 -8
- package/services/engine/reports/docx_group_report.cjs +1 -1
- package/services/engine/reports/xlsAllOurIdeasExport.js +16 -15
- package/services/engine/reports/xls_community_users_report.cjs +2 -2
- package/services/engine/reports/xls_group_report.cjs +1 -1
- package/services/llms/baseChatBot.js +12 -11
- package/services/llms/imageGeneration/chatGptImageGenerator.js +3 -2
- package/services/llms/imageGeneration/collectionImageGenerator.js +7 -6
- package/services/llms/imageGeneration/dalleImageGenerator.js +6 -5
- package/services/llms/imageGeneration/fluxImageGenerator.js +5 -4
- package/services/llms/imageGeneration/imageProcessorService.js +2 -1
- package/services/llms/imageGeneration/imagenImageGenerator.js +8 -7
- package/services/llms/imageGeneration/s3Service.js +12 -11
- package/services/llms/llmTranslation.js +30 -29
- package/services/models/ac_activity.cjs +1 -1
- package/services/models/ac_notification.cjs +1 -1
- package/services/models/ac_translation_cache.cjs +11 -11
- package/services/scripts/analytics/setup_all_plausible_goals.cjs +2 -2
- package/services/scripts/fix_old_delayed_notifications.js +3 -3
- package/services/scripts/kue_status.js +11 -11
- package/services/scripts/kue_watch_stuck_jobs.js +6 -6
- package/services/scripts/translation_clear_language.js +21 -21
- package/services/scripts/translation_delete.js +4 -4
- package/services/scripts/translation_replace_text_from_url.js +4 -4
- package/services/scripts/translation_update.js +4 -4
- package/services/scripts/translations_list.js +5 -5
- package/services/utils/airbrake.cjs +2 -1
- package/services/utils/redisConnection.cjs +6 -5
- package/services/utils/translation_helpers.cjs +3 -2
- package/services/utils/updateAllLocalesFromEn.js +20 -19
- package/services/utils/updateLocaleFolders.js +7 -6
- package/services/workers/activity.cjs +1 -1
- package/services/workers/anonymizations.cjs +1 -1
- package/services/workers/bulk_status_update.cjs +2 -2
- package/services/workers/delayed_jobs.cjs +1 -1
- package/services/workers/deletions.cjs +1 -1
- package/services/workers/email.cjs +1 -1
- package/services/workers/fraud_management.cjs +3 -3
- package/services/workers/generativeAi.js +6 -5
- package/services/workers/main.cjs +1 -1
- package/services/workers/marketing.cjs +1 -1
- package/services/workers/moderation.cjs +1 -1
- package/services/workers/notification_delivery.cjs +1 -1
- package/services/workers/notification_news_feed.cjs +1 -1
- package/services/workers/queue.cjs +2 -2
- package/services/workers/recount.cjs +1 -1
- package/services/workers/reports.cjs +1 -1
- package/services/workers/similarities.cjs +4 -2
- package/services/workers/speech_to_text.cjs +1 -1
- package/utils/airbrake.cjs +1 -1
- package/utils/cjsCodeReview.js +7 -6
- package/utils/community_mapping_tools.cjs +2 -2
- package/utils/copy_utils.cjs +31 -31
- package/utils/export_utils.cjs +7 -7
- package/utils/generateDocumentation.js +10 -9
- package/utils/logger.cjs +2 -23
- package/utils/logger.d.cts +1 -1
- package/utils/loggerAirbrakeTransport.cjs +52 -0
- package/utils/loggerAirbrakeTransport.d.cts +15 -0
- package/utils/loggerAirbrakeTransportTs.d.ts +15 -0
- package/utils/loggerAirbrakeTransportTs.js +45 -0
- package/utils/loggerCore.cjs +29 -0
- package/utils/loggerCore.d.cts +2 -0
- package/utils/loggerCoreTs.d.ts +2 -0
- package/utils/loggerCoreTs.js +23 -0
- package/utils/loggerTs.d.ts +1 -2
- package/utils/loggerTs.js +2 -25
- package/utils/recount_utils.cjs +5 -5
- package/utils/seedModels.js +50 -49
- package/utils/sitemap_generator.cjs +4 -4
- package/utils/ypLanguages.js +2 -2
- package/webSockets.js +8 -7
- package/services/utils/logger.cjs +0 -25
- package/services/utils/logger.d.cts +0 -2
- package/src/agents/assistants/assistant.d.ts +0 -156
- package/src/controllers/audios.d.ts +0 -5
- package/src/controllers/categories.d.ts +0 -5
- package/src/controllers/communities.d.ts +0 -5
- package/src/controllers/domains.d.ts +0 -5
- package/src/controllers/groups.d.ts +0 -5
- package/src/controllers/images.d.ts +0 -5
- package/src/controllers/points.d.ts +0 -5
- package/src/controllers/posts.d.ts +0 -5
- package/src/controllers/ratings.d.ts +0 -5
- package/src/controllers/users.d.ts +0 -5
- package/src/controllers/videos.d.ts +0 -5
- package/src/models/index.d.ts +0 -84
- package/src/services/controllers/activities.d.ts +0 -5
- package/src/services/controllers/notifications.d.ts +0 -5
- package/src/utils/copy_utils.d.ts +0 -4
- package/src/utils/manifest_generator.d.ts +0 -18
package/utils/logger.cjs
CHANGED
|
@@ -1,25 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
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;
|
package/utils/logger.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export = logger;
|
|
2
|
-
declare
|
|
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,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
|
+
}
|
package/utils/loggerTs.d.ts
CHANGED
package/utils/loggerTs.js
CHANGED
|
@@ -1,26 +1,3 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
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;
|
package/utils/recount_utils.cjs
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
400
|
+
log.error(`Community ${communityId} found`);
|
|
401
401
|
callback();
|
|
402
402
|
}
|
|
403
403
|
}).catch(error => {
|
package/utils/seedModels.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
182
|
+
// log.info(`Main index already exists: ${command.substring(0,100)}...`);
|
|
182
183
|
}
|
|
183
184
|
else {
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
252
|
+
log.info("Adding full text index for Post model...");
|
|
252
253
|
await mainDb.Post.addFullTextIndex();
|
|
253
|
-
|
|
254
|
+
log.info("Full text index for Post model added.");
|
|
254
255
|
}
|
|
255
256
|
else {
|
|
256
|
-
|
|
257
|
+
log.warn("Post model or addFullTextIndex method not found in mainDb. Skipping full text index.");
|
|
257
258
|
}
|
|
258
|
-
|
|
259
|
+
log.info("Main database synchronization finished.");
|
|
259
260
|
}
|
|
260
261
|
async function syncPolicySynthDatabase() {
|
|
261
|
-
|
|
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
|
-
|
|
266
|
-
|
|
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
|
-
|
|
274
|
+
log.info("PolicySynth models associated successfully.");
|
|
274
275
|
}
|
|
275
276
|
catch (error) {
|
|
276
|
-
|
|
277
|
+
log.error("Error during PolicySynth database synchronization:", error);
|
|
277
278
|
process.exit(1);
|
|
278
279
|
}
|
|
279
|
-
|
|
280
|
+
log.info("PolicySynth database synchronization finished.");
|
|
280
281
|
}
|
|
281
282
|
async function seedAllModels() {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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
|
-
|
|
288
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
318
|
-
|
|
318
|
+
log.info("--- Databases Synchronized ---");
|
|
319
|
+
log.info("--- Creating User and Domain ---");
|
|
319
320
|
if (!mainDb.User) {
|
|
320
|
-
|
|
321
|
+
log.error("User model (mainDb.User) not found after sync.");
|
|
321
322
|
process.exit(1);
|
|
322
323
|
}
|
|
323
324
|
if (!mainDb.Domain) {
|
|
324
|
-
|
|
325
|
+
log.error("Domain model (mainDb.Domain) not found after sync.");
|
|
325
326
|
process.exit(1);
|
|
326
327
|
}
|
|
327
328
|
// Create User
|
|
328
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
371
|
+
log.info(`User ${newUser.email} added to domain ${newDomain.domain_name} as a user.`);
|
|
371
372
|
}
|
|
372
373
|
else {
|
|
373
|
-
|
|
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
|
-
|
|
378
|
+
log.info(`User ${newUser.email} added to domain ${newDomain.domain_name} as an admin.`);
|
|
378
379
|
}
|
|
379
380
|
else {
|
|
380
|
-
|
|
381
|
+
log.warn(`newDomain.addDomainAdmins is not a function. Skipping adding user to domain admins.`);
|
|
381
382
|
}
|
|
382
|
-
|
|
383
|
-
|
|
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
|
-
|
|
388
|
+
log.error("Unhandled error during seeding process:", error);
|
|
388
389
|
process.exit(1);
|
|
389
390
|
}
|
|
390
391
|
finally {
|
|
391
|
-
|
|
392
|
+
log.info("Closing database connections...");
|
|
392
393
|
await mainSequelize.close();
|
|
393
394
|
await psSequelize.close();
|
|
394
|
-
|
|
395
|
+
log.info("Database connections closed.");
|
|
395
396
|
}
|
|
396
397
|
}
|
|
397
398
|
seedAllModels().catch((error) => {
|
|
398
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
235
|
+
log.error("No post found in sitemap generation");
|
|
236
236
|
return;
|
|
237
237
|
}
|
|
238
238
|
links.push({ url: "/post/" + post.id });
|
package/utils/ypLanguages.js
CHANGED
|
@@ -13,7 +13,7 @@ export class YpLanguages {
|
|
|
13
13
|
allLanguages.push(language);
|
|
14
14
|
}
|
|
15
15
|
else {
|
|
16
|
-
//
|
|
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
|
-
//
|
|
24
|
+
//log.info("googleTranslateLanguages already exists:", language.code);
|
|
25
25
|
}
|
|
26
26
|
});
|
|
27
27
|
return allLanguages;
|