docs(tree): sync website/PROJECT_TREE.md #201

Merged
whitlocktech merged 1 commits from chore/sync-website-tree into main 2026-09-01 14:00:23 +00:00

View File

@@ -137,6 +137,7 @@ website/
│ │ │ └── registry.js │ │ │ └── registry.js
│ │ ├── components/ │ │ ├── components/
│ │ │ ├── security/ │ │ │ ├── security/
│ │ │ │ ├── EmailAddressPanel.jsx
│ │ │ │ ├── RecoveryCodesDisplay.jsx │ │ │ │ ├── RecoveryCodesDisplay.jsx
│ │ │ │ ├── RecoveryCodesPanel.jsx │ │ │ │ ├── RecoveryCodesPanel.jsx
│ │ │ │ ├── TrustedDevicesPanel.jsx │ │ │ │ ├── TrustedDevicesPanel.jsx
@@ -147,6 +148,7 @@ website/
│ │ │ ├── Modal.jsx │ │ │ ├── Modal.jsx
│ │ │ ├── MoonDot.jsx │ │ │ ├── MoonDot.jsx
│ │ │ ├── NavDropdown.jsx │ │ │ ├── NavDropdown.jsx
│ │ │ ├── NotificationBell.jsx
│ │ │ ├── PageHeader.jsx │ │ │ ├── PageHeader.jsx
│ │ │ ├── PageState.jsx │ │ │ ├── PageState.jsx
│ │ │ ├── ProviderIcon.jsx │ │ │ ├── ProviderIcon.jsx
@@ -160,12 +162,18 @@ website/
│ │ ├── contexts/ │ │ ├── contexts/
│ │ │ ├── AuthContext.jsx │ │ │ ├── AuthContext.jsx
│ │ │ └── SiteContext.jsx │ │ │ └── SiteContext.jsx
│ │ ├── emailBlocks/
│ │ │ ├── index.js
│ │ │ ├── registry.js
│ │ │ └── types.jsx
│ │ ├── lib/ │ │ ├── lib/
│ │ │ ├── adminNav.js │ │ │ ├── adminNav.js
│ │ │ ├── engagementRules.js
│ │ │ ├── format.js │ │ │ ├── format.js
│ │ │ ├── heroLayout.js │ │ │ ├── heroLayout.js
│ │ │ ├── moduleAdmin.js │ │ │ ├── moduleAdmin.js
│ │ │ ├── navOverrides.js │ │ │ ├── navOverrides.js
│ │ │ ├── notificationPaths.js
│ │ │ ├── pageShell.js │ │ │ ├── pageShell.js
│ │ │ ├── settingsJson.js │ │ │ ├── settingsJson.js
│ │ │ ├── teamActivity.js │ │ │ ├── teamActivity.js
@@ -201,6 +209,12 @@ website/
│ │ │ │ │ ├── Dashboard.jsx │ │ │ │ │ ├── Dashboard.jsx
│ │ │ │ │ ├── DiscordBotAdmin.jsx │ │ │ │ │ ├── DiscordBotAdmin.jsx
│ │ │ │ │ ├── EmailDelivery.jsx │ │ │ │ │ ├── EmailDelivery.jsx
│ │ │ │ │ ├── EngagementAudiences.jsx
│ │ │ │ │ ├── EngagementRules.jsx
│ │ │ │ │ ├── EngagementSendLog.jsx
│ │ │ │ │ ├── EngagementSuppressions.jsx
│ │ │ │ │ ├── EngagementTemplates.jsx
│ │ │ │ │ ├── EngagementTriggers.jsx
│ │ │ │ │ ├── HeroEditor.jsx │ │ │ │ │ ├── HeroEditor.jsx
│ │ │ │ │ ├── InvitesAdmin.jsx │ │ │ │ │ ├── InvitesAdmin.jsx
│ │ │ │ │ ├── Moderation.jsx │ │ │ │ │ ├── Moderation.jsx
@@ -231,13 +245,15 @@ website/
│ │ │ │ ├── ForgotPassword.jsx │ │ │ │ ├── ForgotPassword.jsx
│ │ │ │ ├── PlayerAccount.jsx │ │ │ │ ├── PlayerAccount.jsx
│ │ │ │ ├── PlayerAppeals.jsx │ │ │ │ ├── PlayerAppeals.jsx
│ │ │ │ ├── PlayerInbox.jsx
│ │ │ │ ├── PlayerLogin.jsx │ │ │ │ ├── PlayerLogin.jsx
│ │ │ │ ├── PlayerNotifications.jsx │ │ │ │ ├── PlayerNotifications.jsx
│ │ │ │ ├── PlayerPortalLayout.jsx │ │ │ │ ├── PlayerPortalLayout.jsx
│ │ │ │ ├── PlayerRegister.jsx │ │ │ │ ├── PlayerRegister.jsx
│ │ │ │ ├── PlayerShell.jsx │ │ │ │ ├── PlayerShell.jsx
│ │ │ │ ├── ResetPassword.jsx │ │ │ │ ├── ResetPassword.jsx
│ │ │ │ ── Unsubscribe.jsx │ │ │ │ ── Unsubscribe.jsx
│ │ │ │ └── VerifyEmail.jsx
│ │ │ ├── public/ │ │ │ ├── public/
│ │ │ │ ├── About.jsx │ │ │ │ ├── About.jsx
│ │ │ │ ├── CmsPage.jsx │ │ │ │ ├── CmsPage.jsx
@@ -260,6 +276,8 @@ website/
│ ├── test/ │ ├── test/
│ │ ├── adminNav.test.js │ │ ├── adminNav.test.js
│ │ ├── apiClient.test.js │ │ ├── apiClient.test.js
│ │ ├── emailTemplates.test.js
│ │ ├── engagementRules.test.js
│ │ ├── featureGate.test.js │ │ ├── featureGate.test.js
│ │ ├── format.test.js │ │ ├── format.test.js
│ │ ├── heroLayout.test.js │ │ ├── heroLayout.test.js
@@ -268,6 +286,7 @@ website/
│ │ ├── moduleRegistry.test.js │ │ ├── moduleRegistry.test.js
│ │ ├── moduleSlots.test.js │ │ ├── moduleSlots.test.js
│ │ ├── navOverrides.test.js │ │ ├── navOverrides.test.js
│ │ ├── notificationPaths.test.js
│ │ ├── pageShell.test.js │ │ ├── pageShell.test.js
│ │ ├── settingsJson.test.js │ │ ├── settingsJson.test.js
│ │ ├── teamActivity.test.js │ │ ├── teamActivity.test.js
@@ -292,12 +311,14 @@ website/
│ │ ├── sso-bridge-smoketest.js │ │ ├── sso-bridge-smoketest.js
│ │ └── stub-idp.js │ │ └── stub-idp.js
│ ├── checkModuleIdentifiers.js │ ├── checkModuleIdentifiers.js
│ ├── checkNoExternalHosts.js
│ └── sonar-test-reporter.mjs │ └── sonar-test-reporter.mjs
├── server/ ├── server/
│ ├── db/ │ ├── db/
│ │ ├── schema.sql │ │ ├── schema.sql
│ │ └── seed.js │ │ └── seed.js
│ ├── scripts/ │ ├── scripts/
│ │ ├── engagementManifest.js
│ │ └── routeManifest.js │ │ └── routeManifest.js
│ ├── src/ │ ├── src/
│ │ ├── auth/ │ │ ├── auth/
@@ -331,9 +352,46 @@ website/
│ │ ├── config/ │ │ ├── config/
│ │ │ ├── brand.js │ │ │ ├── brand.js
│ │ │ ├── coreStreams.js │ │ │ ├── coreStreams.js
│ │ │ ├── coreTriggers.js
│ │ │ ├── csp.js │ │ │ ├── csp.js
│ │ │ ├── themePresets.js │ │ │ ├── themePresets.js
│ │ │ └── version.js │ │ │ └── version.js
│ │ ├── emailBlocks/
│ │ │ ├── types/
│ │ │ │ ├── button.js
│ │ │ │ ├── divider.js
│ │ │ │ ├── heading.js
│ │ │ │ ├── image.js
│ │ │ │ ├── itemList.js
│ │ │ │ └── text.js
│ │ │ ├── index.js
│ │ │ ├── interpolate.js
│ │ │ ├── registry.js
│ │ │ ├── render.js
│ │ │ └── variables.js
│ │ ├── engagement/
│ │ │ ├── transports/
│ │ │ │ ├── index.js
│ │ │ │ └── smtp.js
│ │ │ ├── audiences.js
│ │ │ ├── bounceClassify.js
│ │ │ ├── channels.js
│ │ │ ├── conditions.js
│ │ │ ├── coreChannels.js
│ │ │ ├── coreRules.js
│ │ │ ├── coreScopePrefs.js
│ │ │ ├── emailChannel.js
│ │ │ ├── engine.js
│ │ │ ├── inappChannel.js
│ │ │ ├── index.js
│ │ │ ├── moduleSeeds.js
│ │ │ ├── projection.js
│ │ │ ├── pushChannel.js
│ │ │ ├── scopedPrefs.js
│ │ │ ├── segments.js
│ │ │ ├── suppressions.js
│ │ │ ├── templates.js
│ │ │ └── templateSeeds.js
│ │ ├── middleware/ │ │ ├── middleware/
│ │ │ ├── botScore.js │ │ │ ├── botScore.js
│ │ │ ├── loginProtection.js │ │ │ ├── loginProtection.js
@@ -363,6 +421,25 @@ website/
│ │ │ ├── emailConfig/ │ │ │ ├── emailConfig/
│ │ │ │ ├── emailConfig.db.js │ │ │ │ ├── emailConfig.db.js
│ │ │ │ └── emailConfig.model.js │ │ │ │ └── emailConfig.model.js
│ │ │ ├── emailDedupe/
│ │ │ │ ├── emailDedupe.db.js
│ │ │ │ └── emailDedupe.model.js
│ │ │ ├── emailVerifications/
│ │ │ │ ├── emailVerifications.db.js
│ │ │ │ └── emailVerifications.model.js
│ │ │ ├── engagement/
│ │ │ │ ├── engagementCooldowns.db.js
│ │ │ │ ├── engagementDigest.db.js
│ │ │ │ ├── engagementOutbox.db.js
│ │ │ │ ├── engagementRecipients.db.js
│ │ │ │ ├── engagementRules.db.js
│ │ │ │ ├── engagementRules.model.js
│ │ │ │ ├── engagementSegments.db.js
│ │ │ │ ├── engagementSegments.model.js
│ │ │ │ ├── engagementSends.db.js
│ │ │ │ ├── engagementSuppressions.db.js
│ │ │ │ ├── engagementTemplates.db.js
│ │ │ │ └── engagementTemplates.model.js
│ │ │ ├── invites/ │ │ │ ├── invites/
│ │ │ │ ├── invites.db.js │ │ │ │ ├── invites.db.js
│ │ │ │ └── invites.model.js │ │ │ │ └── invites.model.js
@@ -382,6 +459,9 @@ website/
│ │ │ ├── modules/ │ │ │ ├── modules/
│ │ │ │ ├── modules.db.js │ │ │ │ ├── modules.db.js
│ │ │ │ └── modules.model.js │ │ │ │ └── modules.model.js
│ │ │ ├── notificationChannelPrefs/
│ │ │ │ ├── notificationChannelPrefs.db.js
│ │ │ │ └── notificationChannelPrefs.model.js
│ │ │ ├── notificationSubs/ │ │ │ ├── notificationSubs/
│ │ │ │ ├── notificationSubs.db.js │ │ │ │ ├── notificationSubs.db.js
│ │ │ │ └── notificationSubs.model.js │ │ │ │ └── notificationSubs.model.js
@@ -440,6 +520,8 @@ website/
│ │ │ ├── userIdentities/ │ │ │ ├── userIdentities/
│ │ │ │ ├── userIdentities.db.js │ │ │ │ ├── userIdentities.db.js
│ │ │ │ └── userIdentities.model.js │ │ │ │ └── userIdentities.model.js
│ │ │ ├── userNotifications/
│ │ │ │ └── userNotifications.db.js
│ │ │ ├── users/ │ │ │ ├── users/
│ │ │ │ ├── users.db.js │ │ │ │ ├── users.db.js
│ │ │ │ └── users.model.js │ │ │ │ └── users.model.js
@@ -450,6 +532,7 @@ website/
│ │ │ └── singletonConfigDb.js │ │ │ └── singletonConfigDb.js
│ │ ├── modules/ │ │ ├── modules/
│ │ │ ├── archive.js │ │ │ ├── archive.js
│ │ │ ├── ceilings.js
│ │ │ ├── declared.js │ │ │ ├── declared.js
│ │ │ ├── install.js │ │ │ ├── install.js
│ │ │ ├── lifecycle.js │ │ │ ├── lifecycle.js
@@ -461,8 +544,6 @@ website/
│ │ ├── router/ │ │ ├── router/
│ │ │ ├── v1/ │ │ │ ├── v1/
│ │ │ │ ├── admin/ │ │ │ │ ├── admin/
│ │ │ │ │ ├── account.controller.js
│ │ │ │ │ ├── account.router.js
│ │ │ │ │ ├── activity.router.js │ │ │ │ │ ├── activity.router.js
│ │ │ │ │ ├── admin.controller.js │ │ │ │ │ ├── admin.controller.js
│ │ │ │ │ ├── authProviders.controller.js │ │ │ │ │ ├── authProviders.controller.js
@@ -474,6 +555,8 @@ website/
│ │ │ │ │ ├── discordBot.router.js │ │ │ │ │ ├── discordBot.router.js
│ │ │ │ │ ├── email.router.js │ │ │ │ │ ├── email.router.js
│ │ │ │ │ ├── emailConfig.controller.js │ │ │ │ │ ├── emailConfig.controller.js
│ │ │ │ │ ├── engagement.controller.js
│ │ │ │ │ ├── engagement.router.js
│ │ │ │ │ ├── imageUpload.js │ │ │ │ │ ├── imageUpload.js
│ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.js
│ │ │ │ │ ├── invites.controller.js │ │ │ │ │ ├── invites.controller.js
@@ -493,7 +576,10 @@ website/
│ │ │ │ │ ├── users.router.js │ │ │ │ │ ├── users.router.js
│ │ │ │ │ └── wiki.router.js │ │ │ │ │ └── wiki.router.js
│ │ │ │ ├── auth/ │ │ │ │ ├── auth/
│ │ │ │ │ ├── account.controller.js
│ │ │ │ │ ├── auth.controller.js │ │ │ │ │ ├── auth.controller.js
│ │ │ │ │ ├── emailVerify.controller.js
│ │ │ │ │ ├── emailVerify.router.js
│ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.js
│ │ │ │ │ ├── invite.controller.js │ │ │ │ │ ├── invite.controller.js
│ │ │ │ │ ├── invite.router.js │ │ │ │ │ ├── invite.router.js
@@ -517,7 +603,6 @@ website/
│ │ │ │ │ ├── internal.controller.js │ │ │ │ │ ├── internal.controller.js
│ │ │ │ │ └── internal.routes.js │ │ │ │ │ └── internal.routes.js
│ │ │ │ ├── player/ │ │ │ │ ├── player/
│ │ │ │ │ ├── account.router.js
│ │ │ │ │ ├── appeals.controller.js │ │ │ │ │ ├── appeals.controller.js
│ │ │ │ │ ├── appeals.router.js │ │ │ │ │ ├── appeals.router.js
│ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.js
@@ -526,6 +611,8 @@ website/
│ │ │ │ │ ├── teams.controller.js │ │ │ │ │ ├── teams.controller.js
│ │ │ │ │ └── teams.router.js │ │ │ │ │ └── teams.router.js
│ │ │ │ ├── public/ │ │ │ │ ├── public/
│ │ │ │ │ ├── engagement.controller.js
│ │ │ │ │ ├── engagement.router.js
│ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.js
│ │ │ │ │ ├── modules.controller.js │ │ │ │ │ ├── modules.controller.js
│ │ │ │ │ ├── modules.router.js │ │ │ │ │ ├── modules.router.js
@@ -554,11 +641,14 @@ website/
│ │ │ ├── brandAssets.js │ │ │ ├── brandAssets.js
│ │ │ ├── db.js │ │ │ ├── db.js
│ │ │ ├── discordAnnounce.js │ │ │ ├── discordAnnounce.js
│ │ │ ├── engagementEmit.js
│ │ │ ├── engagementWorker.js
│ │ │ ├── forumHtml.js │ │ │ ├── forumHtml.js
│ │ │ ├── htmlShell.js │ │ │ ├── htmlShell.js
│ │ │ ├── logger.js │ │ │ ├── logger.js
│ │ │ ├── mailer.js │ │ │ ├── mailer.js
│ │ │ ├── navOverrides.js │ │ │ ├── navOverrides.js
│ │ │ ├── newsNotify.js
│ │ │ ├── pushDispatch.js │ │ │ ├── pushDispatch.js
│ │ │ ├── reservedNames.js │ │ │ ├── reservedNames.js
│ │ │ ├── sanitizeHtml.js │ │ │ ├── sanitizeHtml.js
@@ -575,7 +665,8 @@ website/
│ │ │ ├── themeResolve.js │ │ │ ├── themeResolve.js
│ │ │ ├── totp.js │ │ │ ├── totp.js
│ │ │ ├── trustProxy.js │ │ │ ├── trustProxy.js
│ │ │ ── unsubscribeToken.js │ │ │ ── unsubscribeToken.js
│ │ │ └── userNotificationsPrune.js
│ │ ├── app.js │ │ ├── app.js
│ │ ├── internalApp.js │ │ ├── internalApp.js
│ │ └── server.js │ │ └── server.js
@@ -604,15 +695,31 @@ website/
│ │ ├── botScore.test.js │ │ ├── botScore.test.js
│ │ ├── brandAssets.test.js │ │ ├── brandAssets.test.js
│ │ ├── checkModuleIdentifiers.test.js │ │ ├── checkModuleIdentifiers.test.js
│ │ ├── checkNoExternalHosts.test.js
│ │ ├── contentReports.test.js │ │ ├── contentReports.test.js
│ │ ├── csp.test.js │ │ ├── csp.test.js
│ │ ├── emailCollisionSurfaces.test.js
│ │ ├── emailConfig.model.test.js │ │ ├── emailConfig.model.test.js
│ │ ├── emailTemplates.test.js
│ │ ├── emailUniqueness.test.js
│ │ ├── emailVerification.test.js
│ │ ├── engagementAdmin.test.js
│ │ ├── engagementCeilings.test.js
│ │ ├── engagementDeliverability.test.js
│ │ ├── engagementEmail.test.js
│ │ ├── engagementEngine.test.js
│ │ ├── engagementEngineSql.test.js
│ │ ├── engagementInapp.test.js
│ │ ├── engagementManifest.test.js
│ │ ├── engagementTemplatesAdmin.test.js
│ │ ├── engagementTriggers.test.js
│ │ ├── honeypot.test.js │ │ ├── honeypot.test.js
│ │ ├── htmlShell.test.js │ │ ├── htmlShell.test.js
│ │ ├── inviteController.test.js │ │ ├── inviteController.test.js
│ │ ├── invites.test.js │ │ ├── invites.test.js
│ │ ├── loginProtection.test.js │ │ ├── loginProtection.test.js
│ │ ├── mailer.test.js │ │ ├── mailer.test.js
│ │ ├── mailTransports.test.js
│ │ ├── mobileAuthBridge.model.test.js │ │ ├── mobileAuthBridge.model.test.js
│ │ ├── mobileDeviceSessions.test.js │ │ ├── mobileDeviceSessions.test.js
│ │ ├── mobileSession.test.js │ │ ├── mobileSession.test.js
@@ -623,6 +730,7 @@ website/
│ │ ├── moduleClientChunk.test.js │ │ ├── moduleClientChunk.test.js
│ │ ├── moduleDeclared.test.js │ │ ├── moduleDeclared.test.js
│ │ ├── moduleDocsSpec.test.js │ │ ├── moduleDocsSpec.test.js
│ │ ├── moduleEngagementSeeds.test.js
│ │ ├── moduleInstall.test.js │ │ ├── moduleInstall.test.js
│ │ ├── moduleLifecycle.test.js │ │ ├── moduleLifecycle.test.js
│ │ ├── moduleLoader.test.js │ │ ├── moduleLoader.test.js
@@ -630,6 +738,8 @@ website/
│ │ ├── modules.model.test.js │ │ ├── modules.model.test.js
│ │ ├── moduleSchema.test.js │ │ ├── moduleSchema.test.js
│ │ ├── navOverrides.test.js │ │ ├── navOverrides.test.js
│ │ ├── newsNotify.test.js
│ │ ├── notificationChannelPrefs.test.js
│ │ ├── notificationsRoutes.test.js │ │ ├── notificationsRoutes.test.js
│ │ ├── pages.model.test.js │ │ ├── pages.model.test.js
│ │ ├── passwordResetController.test.js │ │ ├── passwordResetController.test.js
@@ -654,6 +764,7 @@ website/
│ │ ├── settingsTheming.test.js │ │ ├── settingsTheming.test.js
│ │ ├── slashCommands.test.js │ │ ├── slashCommands.test.js
│ │ ├── ssoCallback.test.js │ │ ├── ssoCallback.test.js
│ │ ├── ssoEmailVerified.test.js
│ │ ├── ssoState.test.js │ │ ├── ssoState.test.js
│ │ ├── ssoTrustedDevice.test.js │ │ ├── ssoTrustedDevice.test.js
│ │ ├── teamAccess.test.js │ │ ├── teamAccess.test.js
@@ -674,13 +785,15 @@ website/
│ │ ├── totp.test.js │ │ ├── totp.test.js
│ │ ├── trustedDevices.test.js │ │ ├── trustedDevices.test.js
│ │ ├── trustProxy.test.js │ │ ├── trustProxy.test.js
│ │ ── usernamePolicy.test.js │ │ ── usernamePolicy.test.js
│ │ └── userNotificationsSql.test.js
│ ├── tools/ │ ├── tools/
│ │ └── cliloc-export/ │ │ └── cliloc-export/
│ │ ├── clilocexport.csproj │ │ ├── clilocexport.csproj
│ │ ├── Program.cs │ │ ├── Program.cs
│ │ └── README.md │ │ └── README.md
│ ├── .env.example │ ├── .env.example
│ ├── engagement-triggers.json
│ ├── package-lock.json │ ├── package-lock.json
│ ├── package.json │ ├── package.json
│ ├── routes.guards.json │ ├── routes.guards.json