Просмотр исходного кода

Merge pull request #29656 from overleaf/revert-29521-ar-models-es-conversion

Revert "[web] Convert models and self-referential test files to ESM "

GitOrigin-RevId: 5455cccbb513bd9ca36ce526ff1553065f83d233
Andrew Rumble 9 месяцев назад
Родитель
Сommit
ae6dec9dcb
100 измененных файлов с 244 добавлено и 230 удалено
  1. 1 1
      services/web/app/src/Features/Authentication/AuthenticationController.mjs
  2. 3 3
      services/web/app/src/Features/Authentication/AuthenticationManager.mjs
  3. 1 1
      services/web/app/src/Features/Authorization/AuthorizationManager.mjs
  4. 1 1
      services/web/app/src/Features/Captcha/CaptchaMiddleware.mjs
  5. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsEmailHandler.mjs
  6. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsGetter.mjs
  7. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsHandler.mjs
  8. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsInviteController.mjs
  9. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsInviteGetter.mjs
  10. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsInviteHandler.mjs
  11. 1 1
      services/web/app/src/Features/Collaborators/OwnershipTransferHandler.mjs
  12. 4 4
      services/web/app/src/Features/Cooldown/CooldownManager.js
  13. 1 1
      services/web/app/src/Features/Cooldown/CooldownMiddleware.mjs
  14. 1 1
      services/web/app/src/Features/FileStore/FileStoreHandler.mjs
  15. 1 1
      services/web/app/src/Features/GlobalMetrics/GlobalMetricsManager.mjs
  16. 1 1
      services/web/app/src/Features/Helpers/AuthorizationHelper.mjs
  17. 2 2
      services/web/app/src/Features/Helpers/DiffHelper.js
  18. 2 4
      services/web/app/src/Features/Helpers/EmailHelper.js
  19. 1 1
      services/web/app/src/Features/InactiveData/InactiveProjectManager.mjs
  20. 2 2
      services/web/app/src/Features/Institutions/InstitutionsManager.mjs
  21. 1 1
      services/web/app/src/Features/LinkedFiles/LinkedFilesHandler.mjs
  22. 1 1
      services/web/app/src/Features/OnboardingDataCollection/OnboardingDataCollectionManager.mjs
  23. 1 1
      services/web/app/src/Features/PasswordReset/PasswordResetController.mjs
  24. 1 1
      services/web/app/src/Features/PasswordReset/PasswordResetHandler.mjs
  25. 5 1
      services/web/app/src/Features/Project/IterablePath.js
  26. 1 1
      services/web/app/src/Features/Project/ProjectAuditLogHandler.mjs
  27. 1 1
      services/web/app/src/Features/Project/ProjectCollabratecDetailsHandler.mjs
  28. 2 3
      services/web/app/src/Features/Project/ProjectController.mjs
  29. 3 3
      services/web/app/src/Features/Project/ProjectCreationHandler.mjs
  30. 3 3
      services/web/app/src/Features/Project/ProjectDeleter.mjs
  31. 1 1
      services/web/app/src/Features/Project/ProjectDetailsHandler.mjs
  32. 2 2
      services/web/app/src/Features/Project/ProjectDuplicator.mjs
  33. 1 1
      services/web/app/src/Features/Project/ProjectEntityHandler.mjs
  34. 4 4
      services/web/app/src/Features/Project/ProjectEntityMongoUpdateHandler.mjs
  35. 3 3
      services/web/app/src/Features/Project/ProjectEntityUpdateHandler.mjs
  36. 2 2
      services/web/app/src/Features/Project/ProjectGetter.mjs
  37. 1 1
      services/web/app/src/Features/Project/ProjectHistoryHandler.mjs
  38. 3 3
      services/web/app/src/Features/Project/ProjectListController.mjs
  39. 1 1
      services/web/app/src/Features/Project/ProjectLocator.mjs
  40. 1 1
      services/web/app/src/Features/Project/ProjectOptionsHandler.mjs
  41. 1 1
      services/web/app/src/Features/Project/ProjectUpdateHandler.mjs
  42. 1 1
      services/web/app/src/Features/Referal/ReferalAllocator.mjs
  43. 1 1
      services/web/app/src/Features/Referal/ReferalFeatures.mjs
  44. 1 1
      services/web/app/src/Features/Referal/ReferalHandler.mjs
  45. 1 1
      services/web/app/src/Features/SamlLog/SamlLogHandler.mjs
  46. 5 5
      services/web/app/src/Features/Security/OneTimeTokenHandler.js
  47. 1 1
      services/web/app/src/Features/SplitTests/SplitTestHandler.mjs
  48. 1 1
      services/web/app/src/Features/SplitTests/SplitTestManager.mjs
  49. 1 1
      services/web/app/src/Features/Subscription/FeaturesUpdater.mjs
  50. 1 1
      services/web/app/src/Features/Subscription/PaymentProviderEntities.mjs
  51. 2 2
      services/web/app/src/Features/Subscription/SubscriptionController.mjs
  52. 1 1
      services/web/app/src/Features/Subscription/SubscriptionGroupController.mjs
  53. 4 4
      services/web/app/src/Features/Subscription/SubscriptionGroupHandler.mjs
  54. 2 2
      services/web/app/src/Features/Subscription/SubscriptionHandler.mjs
  55. 5 5
      services/web/app/src/Features/Subscription/SubscriptionHelper.js
  56. 3 3
      services/web/app/src/Features/Subscription/SubscriptionLocator.mjs
  57. 3 3
      services/web/app/src/Features/Subscription/SubscriptionUpdater.mjs
  58. 1 1
      services/web/app/src/Features/Subscription/SubscriptionViewModelBuilder.mjs
  59. 2 2
      services/web/app/src/Features/Subscription/TeamInvitesController.mjs
  60. 3 3
      services/web/app/src/Features/Subscription/TeamInvitesHandler.mjs
  61. 1 1
      services/web/app/src/Features/Subscription/UserFeaturesUpdater.mjs
  62. 1 1
      services/web/app/src/Features/Survey/SurveyCache.mjs
  63. 1 1
      services/web/app/src/Features/Survey/SurveyManager.mjs
  64. 1 1
      services/web/app/src/Features/SystemMessages/SystemMessageManager.mjs
  65. 1 1
      services/web/app/src/Features/Tags/TagsHandler.mjs
  66. 1 1
      services/web/app/src/Features/Templates/TemplatesManager.mjs
  67. 1 1
      services/web/app/src/Features/ThirdPartyDataStore/TpdsProjectFlusher.mjs
  68. 1 1
      services/web/app/src/Features/ThirdPartyDataStore/TpdsUpdateHandler.mjs
  69. 1 1
      services/web/app/src/Features/TokenAccess/TokenAccessHandler.mjs
  70. 1 1
      services/web/app/src/Features/Uploads/ProjectUploadManager.mjs
  71. 1 1
      services/web/app/src/Features/User/SAMLIdentityManager.mjs
  72. 1 1
      services/web/app/src/Features/User/ThirdPartyIdentityManager.mjs
  73. 1 1
      services/web/app/src/Features/User/UserAuditLogHandler.mjs
  74. 2 2
      services/web/app/src/Features/User/UserController.mjs
  75. 1 1
      services/web/app/src/Features/User/UserCreator.mjs
  76. 4 4
      services/web/app/src/Features/User/UserDeleter.mjs
  77. 2 2
      services/web/app/src/Features/User/UserEmailsConfirmationHandler.mjs
  78. 1 1
      services/web/app/src/Features/User/UserEmailsController.mjs
  79. 1 1
      services/web/app/src/Features/User/UserGetter.mjs
  80. 3 3
      services/web/app/src/Features/User/UserRegistrationHandler.mjs
  81. 1 1
      services/web/app/src/Features/User/UserUpdater.mjs
  82. 2 2
      services/web/app/src/Features/UserMembership/UserMembershipController.mjs
  83. 3 3
      services/web/app/src/Features/UserMembership/UserMembershipHandler.mjs
  84. 3 3
      services/web/app/src/Features/UserMembership/UserMembershipsHandler.mjs
  85. 5 7
      services/web/app/src/models/DeletedProject.js
  86. 6 4
      services/web/app/src/models/DeletedSubscription.js
  87. 6 4
      services/web/app/src/models/DeletedUser.js
  88. 14 0
      services/web/app/src/models/Doc.js
  89. 0 12
      services/web/app/src/models/Doc.mjs
  90. 2 2
      services/web/app/src/models/DocSnapshot.js
  91. 4 3
      services/web/app/src/models/Feedback.js
  92. 4 3
      services/web/app/src/models/File.js
  93. 21 0
      services/web/app/src/models/Folder.js
  94. 0 20
      services/web/app/src/models/Folder.mjs
  95. 19 0
      services/web/app/src/models/GlobalMetric.js
  96. 0 18
      services/web/app/src/models/GlobalMetric.mjs
  97. 4 3
      services/web/app/src/models/GroupAuditLogEntry.js
  98. 4 3
      services/web/app/src/models/GroupPolicy.js
  99. 8 7
      services/web/app/src/models/Institution.js
  100. 5 3
      services/web/app/src/models/OauthAccessToken.js

+ 1 - 1
services/web/app/src/Features/Authentication/AuthenticationController.mjs

@@ -24,7 +24,7 @@ import AdminAuthorizationHelper from '../Helpers/AdminAuthorizationHelper.mjs'
 import Modules from '../../infrastructure/Modules.js'
 import { expressify, promisify } from '@overleaf/promise-utils'
 import { handleAuthenticateErrors } from './AuthenticationErrors.js'
-import EmailHelper from '../Helpers/EmailHelper.mjs'
+import EmailHelper from '../Helpers/EmailHelper.js'
 
 const { hasAdminAccess } = AdminAuthorizationHelper
 

+ 3 - 3
services/web/app/src/Features/Authentication/AuthenticationManager.mjs

@@ -1,8 +1,8 @@
 import Settings from '@overleaf/settings'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import { db, ObjectId } from '../../infrastructure/mongodb.js'
 import bcrypt from 'bcrypt'
-import EmailHelper from '../Helpers/EmailHelper.mjs'
+import EmailHelper from '../Helpers/EmailHelper.js'
 
 import {
   InvalidEmailError,
@@ -16,7 +16,7 @@ import { callbackify, callbackifyMultiResult } from '@overleaf/promise-utils'
 import HaveIBeenPwned from './HaveIBeenPwned.mjs'
 import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import logger from '@overleaf/logger'
-import DiffHelper from '../Helpers/DiffHelper.mjs'
+import DiffHelper from '../Helpers/DiffHelper.js'
 import Metrics from '@overleaf/metrics'
 
 const BCRYPT_ROUNDS = Settings.security.bcryptRounds || 12

+ 1 - 1
services/web/app/src/Features/Authorization/AuthorizationManager.mjs

@@ -4,7 +4,7 @@ import Features from '../../infrastructure/Features.js'
 import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.mjs'
 import CollaboratorsHandler from '../Collaborators/CollaboratorsHandler.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import PrivilegeLevels from './PrivilegeLevels.js'
 import TokenAccessHandler from '../TokenAccess/TokenAccessHandler.mjs'
 import PublicAccessLevels from './PublicAccessLevels.mjs'

+ 1 - 1
services/web/app/src/Features/Captcha/CaptchaMiddleware.mjs

@@ -6,7 +6,7 @@ import OError from '@overleaf/o-error'
 import DeviceHistory from './DeviceHistory.mjs'
 import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import { expressify } from '@overleaf/promise-utils'
-import EmailsHelper from '../Helpers/EmailHelper.mjs'
+import EmailsHelper from '../Helpers/EmailHelper.js'
 
 function respondInvalidCaptcha(req, res) {
   res.status(400).json({

+ 1 - 1
services/web/app/src/Features/Collaborators/CollaboratorsEmailHandler.mjs

@@ -1,5 +1,5 @@
 import { callbackify } from 'node:util'
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import EmailHandler from '../Email/EmailHandler.mjs'
 import Settings from '@overleaf/settings'
 

+ 1 - 1
services/web/app/src/Features/Collaborators/CollaboratorsGetter.mjs

@@ -4,7 +4,7 @@ import { callbackify } from 'node:util'
 import pLimit from 'p-limit'
 import mongodb from 'mongodb-legacy'
 import OError from '@overleaf/o-error'
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import UserGetter from '../User/UserGetter.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import PublicAccessLevels from '../Authorization/PublicAccessLevels.mjs'

+ 1 - 1
services/web/app/src/Features/Collaborators/CollaboratorsHandler.mjs

@@ -1,6 +1,6 @@
 import { callbackify } from 'node:util'
 import OError from '@overleaf/o-error'
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import logger from '@overleaf/logger'
 import ContactManager from '../Contacts/ContactManager.mjs'

+ 1 - 1
services/web/app/src/Features/Collaborators/CollaboratorsInviteController.mjs

@@ -6,7 +6,7 @@ import CollaboratorsInviteHandler from './CollaboratorsInviteHandler.mjs'
 import CollaboratorsInviteGetter from './CollaboratorsInviteGetter.mjs'
 import logger from '@overleaf/logger'
 import Settings from '@overleaf/settings'
-import EmailHelper from '../Helpers/EmailHelper.mjs'
+import EmailHelper from '../Helpers/EmailHelper.js'
 import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
 import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'
 import SessionManager from '../Authentication/SessionManager.mjs'

+ 1 - 1
services/web/app/src/Features/Collaborators/CollaboratorsInviteGetter.mjs

@@ -1,5 +1,5 @@
 import logger from '@overleaf/logger'
-import { ProjectInvite } from '../../models/ProjectInvite.mjs'
+import { ProjectInvite } from '../../models/ProjectInvite.js'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
 import CollaboratorsInviteHelper from './CollaboratorsInviteHelper.mjs'
 

+ 1 - 1
services/web/app/src/Features/Collaborators/CollaboratorsInviteHandler.mjs

@@ -1,5 +1,5 @@
 import { callbackify } from 'node:util'
-import { ProjectInvite } from '../../models/ProjectInvite.mjs'
+import { ProjectInvite } from '../../models/ProjectInvite.js'
 import logger from '@overleaf/logger'
 import CollaboratorsEmailHandler from './CollaboratorsEmailHandler.mjs'
 import CollaboratorsHandler from './CollaboratorsHandler.mjs'

+ 1 - 1
services/web/app/src/Features/Collaborators/OwnershipTransferHandler.mjs

@@ -1,5 +1,5 @@
 import logger from '@overleaf/logger'
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import CollaboratorsHandler from './CollaboratorsHandler.mjs'

+ 4 - 4
services/web/app/src/Features/Cooldown/CooldownManager.mjs → services/web/app/src/Features/Cooldown/CooldownManager.js

@@ -1,7 +1,7 @@
-import RedisWrapper from '../../infrastructure/RedisWrapper.js'
-import logger from '@overleaf/logger'
-import { promisify } from '@overleaf/promise-utils'
+const RedisWrapper = require('../../infrastructure/RedisWrapper')
 const rclient = RedisWrapper.client('cooldown')
+const logger = require('@overleaf/logger')
+const { promisify } = require('@overleaf/promise-utils')
 
 const COOLDOWN_IN_SECONDS = 60 * 10
 
@@ -45,4 +45,4 @@ CooldownManager.promises = {
   isProjectOnCooldown: promisify(CooldownManager.isProjectOnCooldown),
 }
 
-export default CooldownManager
+module.exports = CooldownManager

+ 1 - 1
services/web/app/src/Features/Cooldown/CooldownMiddleware.mjs

@@ -10,7 +10,7 @@
  * DS207: Consider shorter variations of null checks
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
-import CooldownManager from './CooldownManager.mjs'
+import CooldownManager from './CooldownManager.js'
 import logger from '@overleaf/logger'
 
 let CooldownMiddleware

+ 1 - 1
services/web/app/src/Features/FileStore/FileStoreHandler.mjs

@@ -4,7 +4,7 @@ import Async from 'async'
 import FileHashManager from './FileHashManager.mjs'
 import HistoryManager from '../History/HistoryManager.mjs'
 import ProjectDetailsHandler from '../Project/ProjectDetailsHandler.mjs'
-import { File } from '../../models/File.mjs'
+import { File } from '../../models/File.js'
 import OError from '@overleaf/o-error'
 import { promisifyAll } from '@overleaf/promise-utils'
 import Modules from '../../infrastructure/Modules.js'

+ 1 - 1
services/web/app/src/Features/GlobalMetrics/GlobalMetricsManager.mjs

@@ -1,4 +1,4 @@
-import { GlobalMetric } from '../../models/GlobalMetric.mjs'
+import { GlobalMetric } from '../../models/GlobalMetric.js'
 /**
  * A Generic collection used to track metrics shared across the entirety of the application
  * examples:

+ 1 - 1
services/web/app/src/Features/Helpers/AuthorizationHelper.mjs

@@ -1,4 +1,4 @@
-import { UserSchema } from '../../models/User.mjs'
+import { UserSchema } from '../../models/User.js'
 
 export default {
   hasAnyStaffAccess,

+ 2 - 2
services/web/app/src/Features/Helpers/DiffHelper.mjs → services/web/app/src/Features/Helpers/DiffHelper.js

@@ -17,7 +17,7 @@ function _calculateRatio(matches, length) {
  * corresponding (approximatey) to the overlap between the strings.
  * Identical strings produce 1.0, completely different strings produce 0.0
  * */
-export function stringSimilarity(a, b) {
+function stringSimilarity(a, b) {
   if (
     typeof a !== 'string' ||
     typeof b !== 'string' ||
@@ -50,6 +50,6 @@ export function stringSimilarity(a, b) {
   return _calculateRatio(matches, a.length + b.length)
 }
 
-export default {
+module.exports = {
   stringSimilarity,
 }

+ 2 - 4
services/web/app/src/Features/Helpers/EmailHelper.mjs → services/web/app/src/Features/Helpers/EmailHelper.js

@@ -1,6 +1,4 @@
-import emailAddresses from 'email-addresses'
-
-const { parseOneAddress } = emailAddresses
+const { parseOneAddress } = require('email-addresses')
 
 // available for frontend in https://github.com/overleaf/internal/blob/19d432c70b173752ee7c6d8978dd6be16b042921/services/web/frontend/js/shared/utils/email.tsx#L4
 const EMAIL_REGEXP =
@@ -38,7 +36,7 @@ function parseEmail(email, parseRfcAddress = false) {
   return matched[0]
 }
 
-export default {
+module.exports = {
   getDomain,
   parseEmail,
 }

+ 1 - 1
services/web/app/src/Features/InactiveData/InactiveProjectManager.mjs

@@ -4,7 +4,7 @@ import DocstoreManager from '../Docstore/DocstoreManager.mjs'
 import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectUpdateHandler from '../Project/ProjectUpdateHandler.mjs'
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import Modules from '../../infrastructure/Modules.js'
 import { READ_PREFERENCE_SECONDARY } from '../../infrastructure/mongodb.js'
 import { callbackifyAll } from '@overleaf/promise-utils'

+ 2 - 2
services/web/app/src/Features/Institutions/InstitutionsManager.mjs

@@ -10,8 +10,8 @@ import UserGetter from '../User/UserGetter.mjs'
 import NotificationsBuilder from '../Notifications/NotificationsBuilder.mjs'
 import NotificationsHandler from '../Notifications/NotificationsHandler.mjs'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
-import { Institution } from '../../models/Institution.mjs'
-import { Subscription } from '../../models/Subscription.mjs'
+import { Institution } from '../../models/Institution.js'
+import { Subscription } from '../../models/Subscription.js'
 import OError from '@overleaf/o-error'
 
 const { ObjectId } = mongodb

+ 1 - 1
services/web/app/src/Features/LinkedFiles/LinkedFilesHandler.mjs

@@ -1,7 +1,7 @@
 import FileWriter from '../../infrastructure/FileWriter.js'
 import EditorController from '../Editor/EditorController.mjs'
 import ProjectLocator from '../Project/ProjectLocator.mjs'
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import LinkedFilesErrors from './LinkedFilesErrors.mjs'
 import { callbackifyAll } from '@overleaf/promise-utils'

+ 1 - 1
services/web/app/src/Features/OnboardingDataCollection/OnboardingDataCollectionManager.mjs

@@ -1,4 +1,4 @@
-import OnboardingDataCollectionModel from '../../models/OnboardingDataCollection.mjs'
+import OnboardingDataCollectionModel from '../../models/OnboardingDataCollection.js'
 import OError from '@overleaf/o-error'
 
 const { OnboardingDataCollection, OnboardingDataCollectionSchema } =

+ 1 - 1
services/web/app/src/Features/PasswordReset/PasswordResetController.mjs

@@ -6,7 +6,7 @@ import UserGetter from '../User/UserGetter.mjs'
 import UserUpdater from '../User/UserUpdater.mjs'
 import UserSessionsManager from '../User/UserSessionsManager.mjs'
 import OError from '@overleaf/o-error'
-import EmailsHelper from '../Helpers/EmailHelper.mjs'
+import EmailsHelper from '../Helpers/EmailHelper.js'
 import { expressify } from '@overleaf/promise-utils'
 import { z, validateReq } from '../../infrastructure/Validation.js'
 

+ 1 - 1
services/web/app/src/Features/PasswordReset/PasswordResetHandler.mjs

@@ -1,7 +1,7 @@
 import settings from '@overleaf/settings'
 import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import UserGetter from '../User/UserGetter.mjs'
-import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.mjs'
+import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.js'
 import EmailHandler from '../Email/EmailHandler.mjs'
 import AuthenticationManager from '../Authentication/AuthenticationManager.mjs'
 import { callbackify, promisify } from 'node:util'

+ 5 - 1
services/web/app/src/Features/Project/IterablePath.mjs → services/web/app/src/Features/Project/IterablePath.js

@@ -3,9 +3,13 @@
  * `folder.folders` or `folder.fileRefs` are missing it returns an
  * empty array.
  */
-export function iterablePaths(folder, field) {
+function iterablePaths(folder, field) {
   if (!folder) {
     return []
   }
   return folder[field] || []
 }
+
+module.exports = {
+  iterablePaths,
+}

+ 1 - 1
services/web/app/src/Features/Project/ProjectAuditLogHandler.mjs

@@ -1,5 +1,5 @@
 import logger from '@overleaf/logger'
-import { ProjectAuditLogEntry } from '../../models/ProjectAuditLogEntry.mjs'
+import { ProjectAuditLogEntry } from '../../models/ProjectAuditLogEntry.js'
 import { callbackify } from '@overleaf/promise-utils'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
 

+ 1 - 1
services/web/app/src/Features/Project/ProjectCollabratecDetailsHandler.mjs

@@ -1,6 +1,6 @@
 import mongodb from 'mongodb-legacy'
 
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import { callbackifyAll } from '@overleaf/promise-utils'
 
 const { ObjectId } = mongodb

+ 2 - 3
services/web/app/src/Features/Project/ProjectController.mjs

@@ -12,9 +12,9 @@ import ProjectCreationHandler from './ProjectCreationHandler.mjs'
 import EditorController from '../Editor/EditorController.mjs'
 import ProjectHelper from './ProjectHelper.mjs'
 import metrics from '@overleaf/metrics'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
-import SubscriptionHelper from '../Subscription/SubscriptionHelper.mjs'
+import { isPaidSubscription } from '../Subscription/SubscriptionHelper.js'
 import LimitationsManager from '../Subscription/LimitationsManager.mjs'
 import Settings from '@overleaf/settings'
 import AuthorizationManager from '../Authorization/AuthorizationManager.mjs'
@@ -52,7 +52,6 @@ import SubscriptionController from '../Subscription/SubscriptionController.mjs'
 import { formatCurrency } from '../../util/currency.js'
 import UserSettingsHelper from './UserSettingsHelper.mjs'
 
-const { isPaidSubscription } = SubscriptionHelper
 const { hasAdminAccess } = AdminAuthorizationHelper
 const { ObjectId } = mongodb
 /**

+ 3 - 3
services/web/app/src/Features/Project/ProjectCreationHandler.mjs

@@ -3,12 +3,12 @@ import metrics from '@overleaf/metrics'
 import Settings from '@overleaf/settings'
 import mongodb from 'mongodb-legacy'
 import Features from '../../infrastructure/Features.js'
-import { Project } from '../../models/Project.mjs'
-import { Folder } from '../../models/Folder.mjs'
+import { Project } from '../../models/Project.js'
+import { Folder } from '../../models/Folder.js'
 import ProjectEntityUpdateHandler from './ProjectEntityUpdateHandler.mjs'
 import ProjectDetailsHandler from './ProjectDetailsHandler.mjs'
 import HistoryManager from '../History/HistoryManager.mjs'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import fs from 'node:fs'
 import path from 'node:path'
 import { callbackify } from 'node:util'

+ 3 - 3
services/web/app/src/Features/Project/ProjectDeleter.mjs

@@ -6,9 +6,9 @@ import {
 } from '../../infrastructure/mongodb.js'
 import Modules from '../../infrastructure/Modules.js'
 import { callbackify } from 'node:util'
-import { Project } from '../../models/Project.mjs'
-import { DeletedProject } from '../../models/DeletedProject.mjs'
-import { ProjectAuditLogEntry } from '../../models/ProjectAuditLogEntry.mjs'
+import { Project } from '../../models/Project.js'
+import { DeletedProject } from '../../models/DeletedProject.js'
+import { ProjectAuditLogEntry } from '../../models/ProjectAuditLogEntry.js'
 import Errors from '../Errors/Errors.js'
 import logger from '@overleaf/logger'
 import Settings from '@overleaf/settings'

+ 1 - 1
services/web/app/src/Features/Project/ProjectDetailsHandler.mjs

@@ -1,7 +1,7 @@
 import _ from 'lodash'
 import ProjectGetter from './ProjectGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import logger from '@overleaf/logger'
 import TpdsUpdateSender from '../ThirdPartyDataStore/TpdsUpdateSender.mjs'
 import PublicAccessLevels from '../Authorization/PublicAccessLevels.mjs'

+ 2 - 2
services/web/app/src/Features/Project/ProjectDuplicator.mjs

@@ -3,8 +3,8 @@ import Path from 'node:path'
 import logger from '@overleaf/logger'
 import OError from '@overleaf/o-error'
 import { promiseMapWithLimit } from '@overleaf/promise-utils'
-import { Doc } from '../../models/Doc.mjs'
-import { File } from '../../models/File.mjs'
+import { Doc } from '../../models/Doc.js'
+import { File } from '../../models/File.js'
 import DocstoreManager from '../Docstore/DocstoreManager.mjs'
 import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import HistoryManager from '../History/HistoryManager.mjs'

+ 1 - 1
services/web/app/src/Features/Project/ProjectEntityHandler.mjs

@@ -4,7 +4,7 @@ import Errors from '../Errors/Errors.js'
 import ProjectGetter from './ProjectGetter.mjs'
 import { callbackifyAll } from '@overleaf/promise-utils'
 import OError from '@overleaf/o-error'
-import { iterablePaths } from './IterablePath.mjs'
+import { iterablePaths } from './IterablePath.js'
 
 async function getAllDocs(projectId) {
   // We get the path and name info from the project, and the lines and

+ 4 - 4
services/web/app/src/Features/Project/ProjectEntityMongoUpdateHandler.mjs

@@ -5,17 +5,17 @@ import path from 'node:path'
 import mongodb from 'mongodb-legacy'
 import Settings from '@overleaf/settings'
 import OError from '@overleaf/o-error'
-import CooldownManager from '../Cooldown/CooldownManager.mjs'
+import CooldownManager from '../Cooldown/CooldownManager.js'
 import Errors from '../Errors/Errors.js'
-import { Folder } from '../../models/Folder.mjs'
+import { Folder } from '../../models/Folder.js'
 import LockManager from '../../infrastructure/LockManager.js'
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import ProjectEntityHandler from './ProjectEntityHandler.mjs'
 import ProjectGetter from './ProjectGetter.mjs'
 import ProjectLocator from './ProjectLocator.mjs'
 import FolderStructureBuilder from './FolderStructureBuilder.mjs'
 import SafePath from './SafePath.mjs'
-import { iterablePaths } from './IterablePath.mjs'
+import { iterablePaths } from './IterablePath.js'
 
 const { ObjectId } = mongodb
 

+ 3 - 3
services/web/app/src/Features/Project/ProjectEntityUpdateHandler.mjs

@@ -4,13 +4,13 @@ import logger from '@overleaf/logger'
 import Settings from '@overleaf/settings'
 import Path from 'node:path'
 import fs from 'node:fs'
-import { Doc } from '../../models/Doc.mjs'
+import { Doc } from '../../models/Doc.js'
 import DocstoreManager from '../Docstore/DocstoreManager.mjs'
 import DocumentUpdaterHandler from '../../Features/DocumentUpdater/DocumentUpdaterHandler.mjs'
 import Errors from '../Errors/Errors.js'
 import FileStoreHandler from '../FileStore/FileStoreHandler.mjs'
 import LockManager from '../../infrastructure/LockManager.js'
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import ProjectEntityHandler from './ProjectEntityHandler.mjs'
 import ProjectGetter from './ProjectGetter.mjs'
 import ProjectLocator from './ProjectLocator.mjs'
@@ -22,7 +22,7 @@ import TpdsUpdateSender from '../ThirdPartyDataStore/TpdsUpdateSender.mjs'
 import FileWriter from '../../infrastructure/FileWriter.js'
 import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
 import { callbackifyMultiResult, callbackify } from '@overleaf/promise-utils'
-import { iterablePaths } from './IterablePath.mjs'
+import { iterablePaths } from './IterablePath.js'
 
 const LOCK_NAMESPACE = 'sequentialProjectStructureUpdateLock'
 const VALID_ROOT_DOC_EXTENSIONS = Settings.validRootDocExtensions

+ 2 - 2
services/web/app/src/Features/Project/ProjectGetter.mjs

@@ -1,9 +1,9 @@
 import { db } from '../../infrastructure/mongodb.js'
 import { normalizeQuery } from '../Helpers/Mongo.js'
 import OError from '@overleaf/o-error'
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import LockManager from '../../infrastructure/LockManager.js'
-import { DeletedProject } from '../../models/DeletedProject.mjs'
+import { DeletedProject } from '../../models/DeletedProject.js'
 import { callbackifyAll } from '@overleaf/promise-utils'
 import ProjectEntityMongoUpdateHandler from './ProjectEntityMongoUpdateHandler.mjs'
 import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.mjs'

+ 1 - 1
services/web/app/src/Features/Project/ProjectHistoryHandler.mjs

@@ -1,4 +1,4 @@
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import ProjectDetailsHandler from './ProjectDetailsHandler.mjs'
 import HistoryManager from '../History/HistoryManager.mjs'
 import ProjectEntityUpdateHandler from './ProjectEntityUpdateHandler.mjs'

+ 3 - 3
services/web/app/src/Features/Project/ProjectListController.mjs

@@ -19,7 +19,7 @@ import SubscriptionViewModelBuilder from '../Subscription/SubscriptionViewModelB
 import NotificationsHandler from '../Notifications/NotificationsHandler.mjs'
 import Modules from '../../infrastructure/Modules.js'
 import { OError, V1ConnectionError } from '../Errors/Errors.js'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import UserPrimaryEmailCheckHandler from '../User/UserPrimaryEmailCheckHandler.mjs'
 import UserController from '../User/UserController.mjs'
 import NotificationsBuilder from '../Notifications/NotificationsBuilder.mjs'
@@ -27,10 +27,10 @@ import GeoIpLookup from '../../infrastructure/GeoIpLookup.mjs'
 import SplitTestHandler from '../SplitTests/SplitTestHandler.mjs'
 import SplitTestSessionHandler from '../SplitTests/SplitTestSessionHandler.mjs'
 import TutorialHandler from '../Tutorial/TutorialHandler.mjs'
-import SubscriptionHelper from '../Subscription/SubscriptionHelper.mjs'
+import SubscriptionHelper from '../Subscription/SubscriptionHelper.js'
 import PermissionsManager from '../Authorization/PermissionsManager.mjs'
 import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'
-import { OnboardingDataCollection } from '../../models/OnboardingDataCollection.mjs'
+import { OnboardingDataCollection } from '../../models/OnboardingDataCollection.js'
 import UserSettingsHelper from './UserSettingsHelper.mjs'
 
 /**

+ 1 - 1
services/web/app/src/Features/Project/ProjectLocator.mjs

@@ -5,7 +5,7 @@ import async from 'async'
 import ProjectGetter from './ProjectGetter.mjs'
 import Errors from '../Errors/Errors.js'
 import { promisifyMultiResult } from '@overleaf/promise-utils'
-import { iterablePaths } from './IterablePath.mjs'
+import { iterablePaths } from './IterablePath.js'
 
 /**
  * @param project

+ 1 - 1
services/web/app/src/Features/Project/ProjectOptionsHandler.mjs

@@ -1,4 +1,4 @@
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import settings from '@overleaf/settings'
 import { callbackify } from 'node:util'
 import { db, ObjectId } from '../../infrastructure/mongodb.js'

+ 1 - 1
services/web/app/src/Features/Project/ProjectUpdateHandler.mjs

@@ -1,4 +1,4 @@
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import { callbackify } from 'node:util'
 
 const ProjectUpdateHandler = {

+ 1 - 1
services/web/app/src/Features/Referal/ReferalAllocator.mjs

@@ -1,5 +1,5 @@
 import OError from '@overleaf/o-error'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import FeaturesUpdater from '../Subscription/FeaturesUpdater.mjs'
 import { callbackify } from '@overleaf/promise-utils'
 

+ 1 - 1
services/web/app/src/Features/Referal/ReferalFeatures.mjs

@@ -1,6 +1,6 @@
 import _ from 'lodash'
 import { callbackify } from 'node:util'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import Settings from '@overleaf/settings'
 
 const ReferalFeatures = {

+ 1 - 1
services/web/app/src/Features/Referal/ReferalHandler.mjs

@@ -1,5 +1,5 @@
 import { callbackify } from '@overleaf/promise-utils'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 
 async function getReferedUsers(userId) {
   const projection = { refered_users: 1, refered_user_count: 1 }

+ 1 - 1
services/web/app/src/Features/SamlLog/SamlLogHandler.mjs

@@ -1,4 +1,4 @@
-import { SamlLog } from '../../models/SamlLog.mjs'
+import { SamlLog } from '../../models/SamlLog.js'
 import SessionManager from '../Authentication/SessionManager.mjs'
 import logger from '@overleaf/logger'
 import loggerSerializers from '@overleaf/logger/serializers.js'

+ 5 - 5
services/web/app/src/Features/Security/OneTimeTokenHandler.mjs → services/web/app/src/Features/Security/OneTimeTokenHandler.js

@@ -1,7 +1,7 @@
-import crypto from 'node:crypto'
-import { db } from '../../infrastructure/mongodb.js'
-import Errors from '../Errors/Errors.js'
-import { callbackify } from 'node:util'
+const crypto = require('crypto')
+const { db } = require('../../infrastructure/mongodb')
+const Errors = require('../Errors/Errors')
+const { callbackify } = require('util')
 
 const ONE_HOUR_IN_S = 60 * 60
 
@@ -119,4 +119,4 @@ const OneTimeTokenHandler = {
   },
 }
 
-export default OneTimeTokenHandler
+module.exports = OneTimeTokenHandler

+ 1 - 1
services/web/app/src/Features/SplitTests/SplitTestHandler.mjs

@@ -6,7 +6,7 @@ import crypto from 'node:crypto'
 import _ from 'lodash'
 import { callbackify } from 'node:util'
 import SplitTestCache from './SplitTestCache.mjs'
-import { SplitTest } from '../../models/SplitTest.mjs'
+import { SplitTest } from '../../models/SplitTest.js'
 import UserAnalyticsIdCache from '../Analytics/UserAnalyticsIdCache.mjs'
 import Features from '../../infrastructure/Features.js'
 import SplitTestUtils from './SplitTestUtils.mjs'

+ 1 - 1
services/web/app/src/Features/SplitTests/SplitTestManager.mjs

@@ -1,4 +1,4 @@
-import { SplitTest } from '../../models/SplitTest.mjs'
+import { SplitTest } from '../../models/SplitTest.js'
 import SplitTestUtils from './SplitTestUtils.mjs'
 import OError from '@overleaf/o-error'
 import _ from 'lodash'

+ 1 - 1
services/web/app/src/Features/Subscription/FeaturesUpdater.mjs

@@ -3,7 +3,7 @@ import { callbackify } from 'node:util'
 import { callbackifyMultiResult } from '@overleaf/promise-utils'
 import PlansLocator from './PlansLocator.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
-import SubscriptionHelper from './SubscriptionHelper.mjs'
+import SubscriptionHelper from './SubscriptionHelper.js'
 import UserFeaturesUpdater from './UserFeaturesUpdater.mjs'
 import FeaturesHelper from './FeaturesHelper.mjs'
 import Settings from '@overleaf/settings'

+ 1 - 1
services/web/app/src/Features/Subscription/PaymentProviderEntities.mjs

@@ -20,7 +20,7 @@ import OError from '@overleaf/o-error'
 
 import { DuplicateAddOnError, AddOnNotPresentError } from './Errors.js'
 import PlansLocator from './PlansLocator.mjs'
-import SubscriptionHelper from './SubscriptionHelper.mjs'
+import SubscriptionHelper from './SubscriptionHelper.js'
 import { AI_ADD_ON_CODE, isStandaloneAiAddOnPlanCode } from './AiHelper.js'
 export const MEMBERS_LIMIT_ADD_ON_CODE = 'additional-license'
 

+ 2 - 2
services/web/app/src/Features/Subscription/SubscriptionController.mjs

@@ -2,7 +2,7 @@
 
 import SessionManager from '../Authentication/SessionManager.mjs'
 import SubscriptionHandler from './SubscriptionHandler.mjs'
-import SubscriptionHelper from './SubscriptionHelper.mjs'
+import SubscriptionHelper from './SubscriptionHelper.js'
 import SubscriptionViewModelBuilder from './SubscriptionViewModelBuilder.mjs'
 import LimitationsManager from './LimitationsManager.mjs'
 import RecurlyWrapper from './RecurlyWrapper.mjs'
@@ -28,7 +28,7 @@ import {
   subscriptionChangeIsAiAssistUpgrade,
 } from './AiHelper.js'
 import PlansLocator from './PlansLocator.mjs'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import UserGetter from '../User/UserGetter.mjs'
 import PermissionsManager from '../Authorization/PermissionsManager.mjs'
 import { sanitizeSessionUserForFrontEnd } from '../../infrastructure/FrontEndUser.mjs'

+ 1 - 1
services/web/app/src/Features/Subscription/SubscriptionGroupController.mjs

@@ -8,7 +8,7 @@ import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import { expressify } from '@overleaf/promise-utils'
 import Modules from '../../infrastructure/Modules.js'
 import UserGetter from '../User/UserGetter.mjs'
-import { Subscription } from '../../models/Subscription.mjs'
+import { Subscription } from '../../models/Subscription.js'
 import { z, validateReq } from '../../infrastructure/Validation.js'
 import { isProfessionalGroupPlan } from './PlansHelper.mjs'
 import {

+ 4 - 4
services/web/app/src/Features/Subscription/SubscriptionGroupHandler.mjs

@@ -4,9 +4,9 @@ import OError from '@overleaf/o-error'
 import SubscriptionUpdater from './SubscriptionUpdater.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import SubscriptionController from './SubscriptionController.mjs'
-import SubscriptionHelper from './SubscriptionHelper.mjs'
-import { Subscription } from '../../models/Subscription.mjs'
-import { User } from '../../models/User.mjs'
+import SubscriptionHelper from './SubscriptionHelper.js'
+import { Subscription } from '../../models/Subscription.js'
+import { User } from '../../models/User.js'
 import PlansLocator from './PlansLocator.mjs'
 import TeamInvitesHandler from './TeamInvitesHandler.mjs'
 import GroupPlansData from './GroupPlansData.js'
@@ -19,7 +19,7 @@ import {
   HasPastDueInvoiceError,
   HasNoAdditionalLicenseWhenManuallyCollectedError,
 } from './Errors.js'
-import EmailHelper from '../Helpers/EmailHelper.mjs'
+import EmailHelper from '../Helpers/EmailHelper.js'
 import { InvalidEmailError } from '../Errors/Errors.js'
 
 const MEMBERS_LIMIT_ADD_ON_CODE =

+ 2 - 2
services/web/app/src/Features/Subscription/SubscriptionHandler.mjs

@@ -3,9 +3,9 @@
 import RecurlyWrapper from './RecurlyWrapper.mjs'
 
 import RecurlyClient from './RecurlyClient.mjs'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import logger from '@overleaf/logger'
-import SubscriptionHelper from './SubscriptionHelper.mjs'
+import SubscriptionHelper from './SubscriptionHelper.js'
 import SubscriptionUpdater from './SubscriptionUpdater.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import LimitationsManager from './LimitationsManager.mjs'

+ 5 - 5
services/web/app/src/Features/Subscription/SubscriptionHelper.mjs → services/web/app/src/Features/Subscription/SubscriptionHelper.js

@@ -1,7 +1,7 @@
-import { formatCurrency } from '../../util/currency.js'
-import GroupPlansData from './GroupPlansData.js'
-import { isStandaloneAiAddOnPlanCode } from './AiHelper.js'
-import { Subscription } from '../../models/Subscription.mjs'
+const { formatCurrency } = require('../../util/currency')
+const GroupPlansData = require('./GroupPlansData')
+const { isStandaloneAiAddOnPlanCode } = require('./AiHelper')
+const { Subscription } = require('../../models/Subscription')
 
 const MILLISECONDS = 1_000
 /**
@@ -196,7 +196,7 @@ function isInTrial(trialEndsAt) {
   return trialEndsAt.getTime() > Date.now()
 }
 
-export default {
+module.exports = {
   shouldPlanChangeAtTermEnd,
   generateInitialLocalizedGroupPrice,
   isPaidSubscription,

+ 3 - 3
services/web/app/src/Features/Subscription/SubscriptionLocator.mjs

@@ -4,9 +4,9 @@
 
 import { callbackifyAll } from '@overleaf/promise-utils'
 
-import { Subscription } from '../../models/Subscription.mjs'
-import SubscriptionHelper from './SubscriptionHelper.mjs'
-import { DeletedSubscription } from '../../models/DeletedSubscription.mjs'
+import { Subscription } from '../../models/Subscription.js'
+import SubscriptionHelper from './SubscriptionHelper.js'
+import { DeletedSubscription } from '../../models/DeletedSubscription.js'
 import logger from '@overleaf/logger'
 import { AI_ADD_ON_CODE, isStandaloneAiAddOnPlanCode } from './AiHelper.js'
 import './GroupPlansData.js' // make sure dynamic group plans are loaded

+ 3 - 3
services/web/app/src/Features/Subscription/SubscriptionUpdater.mjs

@@ -1,18 +1,18 @@
 import { db, ObjectId } from '../../infrastructure/mongodb.js'
 import { callbackify } from '@overleaf/promise-utils'
-import { Subscription } from '../../models/Subscription.mjs'
+import { Subscription } from '../../models/Subscription.js'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import PlansLocator from './PlansLocator.mjs'
 import FeaturesUpdater from './FeaturesUpdater.mjs'
 import FeaturesHelper from './FeaturesHelper.mjs'
 import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'
-import { DeletedSubscription } from '../../models/DeletedSubscription.mjs'
+import { DeletedSubscription } from '../../models/DeletedSubscription.js'
 import logger from '@overleaf/logger'
 import Features from '../../infrastructure/Features.js'
 import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import UserUpdater from '../User/UserUpdater.mjs'
 import AccountMappingHelper from '../Analytics/AccountMappingHelper.mjs'
-import { SSOConfig } from '../../models/SSOConfig.mjs'
+import { SSOConfig } from '../../models/SSOConfig.js'
 import mongoose from '../../infrastructure/Mongoose.js'
 import Modules from '../../infrastructure/Modules.js'
 

+ 1 - 1
services/web/app/src/Features/Subscription/SubscriptionViewModelBuilder.mjs

@@ -12,7 +12,7 @@ import PublishersGetter from '../Publishers/PublishersGetter.mjs'
 import sanitizeHtml from 'sanitize-html'
 import _ from 'lodash'
 import async from 'async'
-import SubscriptionHelper from './SubscriptionHelper.mjs'
+import SubscriptionHelper from './SubscriptionHelper.js'
 import { callbackify } from '@overleaf/promise-utils'
 import { V1ConnectionError } from '../Errors/Errors.js'
 import FeaturesHelper from './FeaturesHelper.mjs'

+ 2 - 2
services/web/app/src/Features/Subscription/TeamInvitesController.mjs

@@ -4,9 +4,9 @@ import OError from '@overleaf/o-error'
 import TeamInvitesHandler from './TeamInvitesHandler.mjs'
 import SessionManager from '../Authentication/SessionManager.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
-import SubscriptionHelper from './SubscriptionHelper.mjs'
+import SubscriptionHelper from './SubscriptionHelper.js'
 import ErrorController from '../Errors/ErrorController.mjs'
-import EmailHelper from '../Helpers/EmailHelper.mjs'
+import EmailHelper from '../Helpers/EmailHelper.js'
 import UserGetter from '../User/UserGetter.mjs'
 import { expressify } from '@overleaf/promise-utils'
 import HttpErrorHandler from '../Errors/HttpErrorHandler.mjs'

+ 3 - 3
services/web/app/src/Features/Subscription/TeamInvitesHandler.mjs

@@ -3,14 +3,14 @@ import crypto from 'node:crypto'
 import settings from '@overleaf/settings'
 import Modules from '../../infrastructure/Modules.js'
 import mongodb from 'mongodb-legacy'
-import { Subscription } from '../../models/Subscription.mjs'
-import { SSOConfig } from '../../models/SSOConfig.mjs'
+import { Subscription } from '../../models/Subscription.js'
+import { SSOConfig } from '../../models/SSOConfig.js'
 import UserGetter from '../User/UserGetter.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import SubscriptionUpdater from './SubscriptionUpdater.mjs'
 import LimitationsManager from './LimitationsManager.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
-import EmailHelper from '../Helpers/EmailHelper.mjs'
+import EmailHelper from '../Helpers/EmailHelper.js'
 import Errors from '../Errors/Errors.js'
 import { callbackify, callbackifyMultiResult } from '@overleaf/promise-utils'
 import NotificationsBuilder from '../Notifications/NotificationsBuilder.mjs'

+ 1 - 1
services/web/app/src/Features/Subscription/UserFeaturesUpdater.mjs

@@ -1,4 +1,4 @@
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import { callbackify } from 'node:util'
 import Settings from '@overleaf/settings'
 

+ 1 - 1
services/web/app/src/Features/Survey/SurveyCache.mjs

@@ -1,5 +1,5 @@
 import SurveyManager from './SurveyManager.mjs'
-import { Survey } from '../../models/Survey.mjs'
+import { Survey } from '../../models/Survey.js'
 import { CacheLoader } from 'cache-flow'
 
 class SurveyCache extends CacheLoader {

+ 1 - 1
services/web/app/src/Features/Survey/SurveyManager.mjs

@@ -1,4 +1,4 @@
-import { Survey } from '../../models/Survey.mjs'
+import { Survey } from '../../models/Survey.js'
 import OError from '@overleaf/o-error'
 
 async function getSurvey() {

+ 1 - 1
services/web/app/src/Features/SystemMessages/SystemMessageManager.mjs

@@ -1,4 +1,4 @@
-import { SystemMessage } from '../../models/SystemMessage.mjs'
+import { SystemMessage } from '../../models/SystemMessage.js'
 import { addRequiredCleanupHandlerBeforeDrainingConnections } from '../../infrastructure/GracefulShutdown.js'
 import { callbackifyAll } from '@overleaf/promise-utils'
 import logger from '@overleaf/logger'

+ 1 - 1
services/web/app/src/Features/Tags/TagsHandler.mjs

@@ -1,4 +1,4 @@
-import { Tag } from '../../models/Tag.mjs'
+import { Tag } from '../../models/Tag.js'
 import { callbackify } from '@overleaf/promise-utils'
 
 const MAX_TAG_LENGTH = 50

+ 1 - 1
services/web/app/src/Features/Templates/TemplatesManager.mjs

@@ -1,4 +1,4 @@
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import ProjectDetailsHandler from '../Project/ProjectDetailsHandler.mjs'
 import ProjectOptionsHandlerModule from '../Project/ProjectOptionsHandler.mjs'
 import ProjectRootDocManagerModule from '../Project/ProjectRootDocManager.mjs'

+ 1 - 1
services/web/app/src/Features/ThirdPartyDataStore/TpdsProjectFlusher.mjs

@@ -3,7 +3,7 @@ import logger from '@overleaf/logger'
 import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectEntityHandler from '../Project/ProjectEntityHandler.mjs'
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import TpdsUpdateSender from './TpdsUpdateSender.mjs'
 import OError from '@overleaf/o-error'
 

+ 1 - 1
services/web/app/src/Features/ThirdPartyDataStore/TpdsUpdateHandler.mjs

@@ -8,7 +8,7 @@ import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectHelper from '../Project/ProjectHelper.mjs'
 import ProjectRootDocManager from '../Project/ProjectRootDocManager.mjs'
 import FileTypeManager from '../Uploads/FileTypeManager.mjs'
-import CooldownManager from '../Cooldown/CooldownManager.mjs'
+import CooldownManager from '../Cooldown/CooldownManager.js'
 import Errors from '../Errors/Errors.js'
 import Modules from '../../infrastructure/Modules.js'
 

+ 1 - 1
services/web/app/src/Features/TokenAccess/TokenAccessHandler.mjs

@@ -1,4 +1,4 @@
-import { Project } from '../../models/Project.mjs'
+import { Project } from '../../models/Project.js'
 import PublicAccessLevels from '../Authorization/PublicAccessLevels.mjs'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
 import mongodb from 'mongodb-legacy'

+ 1 - 1
services/web/app/src/Features/Uploads/ProjectUploadManager.mjs

@@ -2,7 +2,7 @@ import Path from 'node:path'
 import fs from 'node:fs'
 import { callbackify } from 'node:util'
 import ArchiveManager from './ArchiveManager.mjs'
-import { Doc } from '../../models/Doc.mjs'
+import { Doc } from '../../models/Doc.js'
 import DocstoreManager from '../Docstore/DocstoreManager.mjs'
 import DocumentHelper from '../Documents/DocumentHelper.mjs'
 import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'

+ 1 - 1
services/web/app/src/Features/User/SAMLIdentityManager.mjs

@@ -9,7 +9,7 @@ import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserUpdater from '../User/UserUpdater.mjs'
 import logger from '@overleaf/logger'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import { promiseMapWithLimit } from '@overleaf/promise-utils'
 
 const { ObjectId } = mongodb

+ 1 - 1
services/web/app/src/Features/User/ThirdPartyIdentityManager.mjs

@@ -5,7 +5,7 @@ import Errors from '../Errors/Errors.js'
 import _ from 'lodash'
 import logger from '@overleaf/logger'
 import settings from '@overleaf/settings'
-import { User } from '../../../../app/src/models/User.mjs'
+import { User } from '../../../../app/src/models/User.js'
 import { callbackify } from '@overleaf/promise-utils'
 import OError from '@overleaf/o-error'
 

+ 1 - 1
services/web/app/src/Features/User/UserAuditLogHandler.mjs

@@ -1,6 +1,6 @@
 import OError from '@overleaf/o-error'
 import logger from '@overleaf/logger'
-import { UserAuditLogEntry } from '../../models/UserAuditLogEntry.mjs'
+import { UserAuditLogEntry } from '../../models/UserAuditLogEntry.js'
 import { callbackify } from 'node:util'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
 

+ 2 - 2
services/web/app/src/Features/User/UserController.mjs

@@ -1,7 +1,7 @@
 import UserHandler from './UserHandler.mjs'
 import UserDeleter from './UserDeleter.mjs'
 import UserGetter from './UserGetter.mjs'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import NewsletterManager from '../Newsletter/NewsletterManager.mjs'
 import logger from '@overleaf/logger'
 import metrics from '@overleaf/metrics'
@@ -21,7 +21,7 @@ import { promisify } from 'node:util'
 import { expressify } from '@overleaf/promise-utils'
 import { acceptsJson } from '../../infrastructure/RequestContentTypeDetection.js'
 import Modules from '../../infrastructure/Modules.js'
-import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.mjs'
+import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.js'
 
 async function _sendSecurityAlertClearedSessions(user) {
   const emailOptions = {

+ 1 - 1
services/web/app/src/Features/User/UserCreator.mjs

@@ -2,7 +2,7 @@ import logger from '@overleaf/logger'
 import util from 'node:util'
 import { AffiliationError } from '../Errors/Errors.js'
 import Features from '../../infrastructure/Features.js'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import UserDeleter from './UserDeleter.mjs'
 import UserGetter from './UserGetter.mjs'
 import UserUpdater from './UserUpdater.mjs'

+ 4 - 4
services/web/app/src/Features/User/UserDeleter.mjs

@@ -1,10 +1,10 @@
 import { callbackify } from 'node:util'
 import logger from '@overleaf/logger'
 import Settings from '@overleaf/settings'
-import { User } from '../../models/User.mjs'
-import { DeletedUser } from '../../models/DeletedUser.mjs'
-import { UserAuditLogEntry } from '../../models/UserAuditLogEntry.mjs'
-import { Feedback } from '../../models/Feedback.mjs'
+import { User } from '../../models/User.js'
+import { DeletedUser } from '../../models/DeletedUser.js'
+import { UserAuditLogEntry } from '../../models/UserAuditLogEntry.js'
+import { Feedback } from '../../models/Feedback.js'
 import NewsletterManager from '../Newsletter/NewsletterManager.mjs'
 import ProjectDeleter from '../Project/ProjectDeleter.mjs'
 import SubscriptionHandler from '../Subscription/SubscriptionHandler.mjs'

+ 2 - 2
services/web/app/src/Features/User/UserEmailsConfirmationHandler.mjs

@@ -1,6 +1,6 @@
-import EmailHelper from '../Helpers/EmailHelper.mjs'
+import EmailHelper from '../Helpers/EmailHelper.js'
 import EmailHandler from '../Email/EmailHandler.mjs'
-import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.mjs'
+import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.js'
 import settings from '@overleaf/settings'
 import Errors from '../Errors/Errors.js'
 import UserUpdater from './UserUpdater.mjs'

+ 1 - 1
services/web/app/src/Features/User/UserEmailsController.mjs

@@ -6,7 +6,7 @@ import UserGetter from './UserGetter.mjs'
 import UserUpdater from './UserUpdater.mjs'
 import UserSessionsManager from './UserSessionsManager.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
-import EmailHelper from '../Helpers/EmailHelper.mjs'
+import EmailHelper from '../Helpers/EmailHelper.js'
 import UserEmailsConfirmationHandler from './UserEmailsConfirmationHandler.mjs'
 import InstitutionsAPI from '../Institutions/InstitutionsAPI.mjs'
 import Errors from '../Errors/Errors.js'

+ 1 - 1
services/web/app/src/Features/User/UserGetter.mjs

@@ -6,7 +6,7 @@ import InstitutionsAPI from '../Institutions/InstitutionsAPI.mjs'
 import InstitutionsHelper from '../Institutions/InstitutionsHelper.mjs'
 import Errors from '../Errors/Errors.js'
 import Features from '../../infrastructure/Features.js'
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import { normalizeQuery, normalizeMultiQuery } from '../Helpers/Mongo.js'
 import Modules from '../../infrastructure/Modules.js'
 import FeaturesHelper from '../Subscription/FeaturesHelper.mjs'

+ 3 - 3
services/web/app/src/Features/User/UserRegistrationHandler.mjs

@@ -1,4 +1,4 @@
-import { User } from '../../models/User.mjs'
+import { User } from '../../models/User.js'
 import UserCreator from './UserCreator.mjs'
 import UserGetter from './UserGetter.mjs'
 import AuthenticationManager from '../Authentication/AuthenticationManager.mjs'
@@ -6,9 +6,9 @@ import NewsletterManager from '../Newsletter/NewsletterManager.mjs'
 import logger from '@overleaf/logger'
 import crypto from 'node:crypto'
 import EmailHandler from '../Email/EmailHandler.mjs'
-import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.mjs'
+import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.js'
 import settings from '@overleaf/settings'
-import EmailHelper from '../Helpers/EmailHelper.mjs'
+import EmailHelper from '../Helpers/EmailHelper.js'
 import { callbackify, callbackifyMultiResult } from '@overleaf/promise-utils'
 import OError from '@overleaf/o-error'
 

+ 1 - 1
services/web/app/src/Features/User/UserUpdater.mjs

@@ -8,7 +8,7 @@ import InstitutionsAPI from '../Institutions/InstitutionsAPI.mjs'
 import Features from '../../infrastructure/Features.js'
 import FeaturesUpdater from '../Subscription/FeaturesUpdater.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
-import EmailHelper from '../Helpers/EmailHelper.mjs'
+import EmailHelper from '../Helpers/EmailHelper.js'
 import Errors from '../Errors/Errors.js'
 import NewsletterManager from '../Newsletter/NewsletterManager.mjs'
 import UserAuditLogHandler from './UserAuditLogHandler.mjs'

+ 2 - 2
services/web/app/src/Features/UserMembership/UserMembershipController.mjs

@@ -1,10 +1,10 @@
 import SessionManager from '../Authentication/SessionManager.mjs'
 import UserMembershipHandler from './UserMembershipHandler.mjs'
 import Errors from '../Errors/Errors.js'
-import EmailHelper from '../Helpers/EmailHelper.mjs'
+import EmailHelper from '../Helpers/EmailHelper.js'
 import { csvAttachment } from '../../infrastructure/Response.js'
 import UserMembershipErrors from './UserMembershipErrors.mjs'
-import { SSOConfig } from '../../models/SSOConfig.mjs'
+import { SSOConfig } from '../../models/SSOConfig.js'
 import { Parser as CSVParser } from 'json2csv'
 import { expressify } from '@overleaf/promise-utils'
 import PlansLocator from '../Subscription/PlansLocator.mjs'

+ 3 - 3
services/web/app/src/Features/UserMembership/UserMembershipHandler.mjs

@@ -1,8 +1,8 @@
 import mongodb from 'mongodb-legacy'
 import { callbackify } from '@overleaf/promise-utils'
-import { Institution } from '../../models/Institution.mjs'
-import { Subscription } from '../../models/Subscription.mjs'
-import { Publisher } from '../../models/Publisher.mjs'
+import { Institution } from '../../models/Institution.js'
+import { Subscription } from '../../models/Subscription.js'
+import { Publisher } from '../../models/Publisher.js'
 import UserMembershipViewModel from './UserMembershipViewModel.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserMembershipErrors from './UserMembershipErrors.mjs'

+ 3 - 3
services/web/app/src/Features/UserMembership/UserMembershipsHandler.mjs

@@ -13,9 +13,9 @@ import async from 'async'
 
 import { promisifyAll } from '@overleaf/promise-utils'
 import UserMembershipEntityConfigs from './UserMembershipEntityConfigs.mjs'
-import * as InstitutionModel from '../../models/Institution.mjs'
-import * as SubscriptionModel from '../../models/Subscription.mjs'
-import * as PublisherModel from '../../models/Publisher.mjs'
+import InstitutionModel from '../../models/Institution.js'
+import SubscriptionModel from '../../models/Subscription.js'
+import PublisherModel from '../../models/Publisher.js'
 
 const EntityModels = {
   Institution: InstitutionModel.Institution,

+ 5 - 7
services/web/app/src/models/DeletedProject.mjs → services/web/app/src/models/DeletedProject.js

@@ -1,10 +1,10 @@
-import mongoose from '../infrastructure/Mongoose.js'
-import { ProjectSchema } from './Project.mjs'
+const mongoose = require('../infrastructure/Mongoose')
+const { ProjectSchema } = require('./Project')
 
 const { Schema } = mongoose
 const { ObjectId } = Schema
 
-export const DeleterDataSchema = new Schema({
+const DeleterDataSchema = new Schema({
   deleterId: { type: ObjectId, ref: 'User' },
   deleterIpAddress: { type: String },
   deletedAt: { type: Date },
@@ -30,7 +30,5 @@ const DeletedProjectSchema = new Schema(
   { collection: 'deletedProjects', minimize: false }
 )
 
-export const DeletedProject = mongoose.model(
-  'DeletedProject',
-  DeletedProjectSchema
-)
+exports.DeletedProject = mongoose.model('DeletedProject', DeletedProjectSchema)
+exports.DeletedProjectSchema = DeletedProjectSchema

+ 6 - 4
services/web/app/src/models/DeletedSubscription.mjs → services/web/app/src/models/DeletedSubscription.js

@@ -1,10 +1,10 @@
-import mongoose from '../infrastructure/Mongoose.js'
-import { SubscriptionSchema } from './Subscription.mjs'
+const mongoose = require('../infrastructure/Mongoose')
+const { SubscriptionSchema } = require('./Subscription')
 
 const { Schema } = mongoose
 const { ObjectId } = Schema
 
-export const DeleterDataSchema = new Schema(
+const DeleterDataSchema = new Schema(
   {
     deleterId: { type: ObjectId, ref: 'User' },
     deleterIpAddress: { type: String },
@@ -26,7 +26,9 @@ const DeletedSubscriptionSchema = new Schema(
   { collection: 'deletedSubscriptions', minimize: false }
 )
 
-export const DeletedSubscription = mongoose.model(
+exports.DeletedSubscription = mongoose.model(
   'DeletedSubscription',
   DeletedSubscriptionSchema
 )
+
+exports.DeletedSubscriptionSchema = DeletedSubscriptionSchema

+ 6 - 4
services/web/app/src/models/DeletedUser.mjs → services/web/app/src/models/DeletedUser.js

@@ -1,5 +1,5 @@
-import mongoose from '../infrastructure/Mongoose.js'
-import { UserSchema } from './User.mjs'
+const mongoose = require('../infrastructure/Mongoose')
+const { UserSchema } = require('./User')
 
 const { Schema } = mongoose
 const { ObjectId } = Schema
@@ -18,7 +18,7 @@ const DeleterDataSchema = new Schema({
   deletedUserOverleafId: { type: Number },
 })
 
-export const DeletedUserSchema = new Schema(
+const DeletedUserSchema = new Schema(
   {
     deleterData: DeleterDataSchema,
     user: UserSchema,
@@ -26,4 +26,6 @@ export const DeletedUserSchema = new Schema(
   { collection: 'deletedUsers', minimize: false }
 )
 
-export const DeletedUser = mongoose.model('DeletedUser', DeletedUserSchema)
+exports.DeletedUser = mongoose.model('DeletedUser', DeletedUserSchema)
+
+exports.DeletedUserSchema = DeletedUserSchema

+ 14 - 0
services/web/app/src/models/Doc.js

@@ -0,0 +1,14 @@
+const mongoose = require('../infrastructure/Mongoose')
+
+const { Schema } = mongoose
+
+const DocSchema = new Schema(
+  {
+    name: { type: String, default: 'new doc' },
+  },
+  { minimize: false }
+)
+
+exports.Doc = mongoose.model('Doc', DocSchema)
+
+exports.DocSchema = DocSchema

+ 0 - 12
services/web/app/src/models/Doc.mjs

@@ -1,12 +0,0 @@
-import mongoose from '../infrastructure/Mongoose.js'
-
-const { Schema } = mongoose
-
-export const DocSchema = new Schema(
-  {
-    name: { type: String, default: 'new doc' },
-  },
-  { minimize: false }
-)
-
-export const Doc = mongoose.model('Doc', DocSchema)

+ 2 - 2
services/web/app/src/models/DocSnapshot.mjs → services/web/app/src/models/DocSnapshot.js

@@ -1,4 +1,4 @@
-import mongoose from '../infrastructure/Mongoose.js'
+const mongoose = require('../infrastructure/Mongoose')
 
 const { Schema } = mongoose
 
@@ -15,4 +15,4 @@ const DocSnapshotSchema = new Schema(
   { collection: 'docSnapshots', minimize: false }
 )
 
-export const DocSnapshot = mongoose.model('DocSnapshot', DocSnapshotSchema)
+exports.DocSnapshot = mongoose.model('DocSnapshot', DocSnapshotSchema)

+ 4 - 3
services/web/app/src/models/Feedback.mjs → services/web/app/src/models/Feedback.js

@@ -1,8 +1,8 @@
-import mongoose from '../infrastructure/Mongoose.js'
+const mongoose = require('../infrastructure/Mongoose')
 const { Schema } = mongoose
 const { ObjectId } = Schema
 
-export const FeedbackSchema = new Schema(
+const FeedbackSchema = new Schema(
   {
     userId: {
       type: ObjectId,
@@ -20,4 +20,5 @@ export const FeedbackSchema = new Schema(
   { minimize: false }
 )
 
-export const Feedback = mongoose.model('Feedback', FeedbackSchema)
+exports.Feedback = mongoose.model('Feedback', FeedbackSchema)
+exports.FeedbackSchema = FeedbackSchema

+ 4 - 3
services/web/app/src/models/File.mjs → services/web/app/src/models/File.js

@@ -1,8 +1,8 @@
-import mongoose from '../infrastructure/Mongoose.js'
+const mongoose = require('../infrastructure/Mongoose')
 
 const { Schema } = mongoose
 
-export const FileSchema = new Schema(
+const FileSchema = new Schema(
   {
     name: {
       type: String,
@@ -23,4 +23,5 @@ export const FileSchema = new Schema(
   { minimize: false }
 )
 
-export const File = mongoose.model('File', FileSchema)
+exports.File = mongoose.model('File', FileSchema)
+exports.FileSchema = FileSchema

+ 21 - 0
services/web/app/src/models/Folder.js

@@ -0,0 +1,21 @@
+const mongoose = require('../infrastructure/Mongoose')
+const { DocSchema } = require('./Doc')
+const { FileSchema } = require('./File')
+
+const { Schema } = mongoose
+
+const FolderSchema = new Schema(
+  {
+    name: { type: String, default: 'new folder' },
+  },
+  { minimize: false }
+)
+
+FolderSchema.add({
+  docs: [DocSchema],
+  fileRefs: [FileSchema],
+  folders: [FolderSchema],
+})
+
+exports.Folder = mongoose.model('Folder', FolderSchema)
+exports.FolderSchema = FolderSchema

+ 0 - 20
services/web/app/src/models/Folder.mjs

@@ -1,20 +0,0 @@
-import mongoose from '../infrastructure/Mongoose.js'
-import { DocSchema } from './Doc.mjs'
-import { FileSchema } from './File.mjs'
-
-const { Schema } = mongoose
-
-export const FolderSchema = new Schema(
-  {
-    name: { type: String, default: 'new folder' },
-  },
-  { minimize: false }
-)
-
-FolderSchema.add({
-  docs: [DocSchema],
-  fileRefs: [FileSchema],
-  folders: [FolderSchema],
-})
-
-export const Folder = mongoose.model('Folder', FolderSchema)

+ 19 - 0
services/web/app/src/models/GlobalMetric.js

@@ -0,0 +1,19 @@
+const mongoose = require('../infrastructure/Mongoose')
+const { Schema } = mongoose
+
+const GlobalMetricSchema = new Schema(
+  {
+    _id: { type: String, required: true },
+    value: {
+      type: Number,
+      default: 0,
+    },
+  },
+  {
+    collection: 'globalMetrics',
+    minimize: false,
+  }
+)
+
+exports.GlobalMetric = mongoose.model('GlobalMetric', GlobalMetricSchema)
+exports.GlobalMetricSchema = GlobalMetricSchema

+ 0 - 18
services/web/app/src/models/GlobalMetric.mjs

@@ -1,18 +0,0 @@
-import mongoose from '../infrastructure/Mongoose.js'
-const { Schema } = mongoose
-
-export const GlobalMetricSchema = new Schema(
-  {
-    _id: { type: String, required: true },
-    value: {
-      type: Number,
-      default: 0,
-    },
-  },
-  {
-    collection: 'globalMetrics',
-    minimize: false,
-  }
-)
-
-export const GlobalMetric = mongoose.model('GlobalMetric', GlobalMetricSchema)

+ 4 - 3
services/web/app/src/models/GroupAuditLogEntry.mjs → services/web/app/src/models/GroupAuditLogEntry.js

@@ -1,7 +1,7 @@
-import mongoose from '../infrastructure/Mongoose.js'
+const mongoose = require('../infrastructure/Mongoose')
 const { Schema } = mongoose
 
-export const GroupAuditLogEntrySchema = new Schema(
+const GroupAuditLogEntrySchema = new Schema(
   {
     groupId: { type: Schema.Types.ObjectId, index: true },
     info: { type: Object },
@@ -16,7 +16,8 @@ export const GroupAuditLogEntrySchema = new Schema(
   }
 )
 
-export const GroupAuditLogEntry = mongoose.model(
+exports.GroupAuditLogEntry = mongoose.model(
   'GroupAuditLogEntry',
   GroupAuditLogEntrySchema
 )
+exports.GroupAuditLogEntrySchema = GroupAuditLogEntrySchema

+ 4 - 3
services/web/app/src/models/GroupPolicy.mjs → services/web/app/src/models/GroupPolicy.js

@@ -1,8 +1,8 @@
-import mongoose from '../infrastructure/Mongoose.js'
+const mongoose = require('../infrastructure/Mongoose')
 
 const { Schema } = mongoose
 
-export const GroupPolicySchema = new Schema(
+const GroupPolicySchema = new Schema(
   {
     // User can't delete their own account
     userCannotDeleteOwnAccount: Boolean,
@@ -34,4 +34,5 @@ export const GroupPolicySchema = new Schema(
   { minimize: false }
 )
 
-export const GroupPolicy = mongoose.model('GroupPolicy', GroupPolicySchema)
+exports.GroupPolicy = mongoose.model('GroupPolicy', GroupPolicySchema)
+exports.GroupPolicySchema = GroupPolicySchema

+ 8 - 7
services/web/app/src/models/Institution.mjs → services/web/app/src/models/Institution.js

@@ -1,12 +1,12 @@
-import mongoose from '../infrastructure/Mongoose.js'
-import settings from '@overleaf/settings'
-import logger from '@overleaf/logger'
-import { promisify } from '@overleaf/promise-utils'
-import { fetchJson } from '@overleaf/fetch-utils'
+const mongoose = require('../infrastructure/Mongoose')
 const { Schema } = mongoose
 const { ObjectId } = Schema
+const settings = require('@overleaf/settings')
+const logger = require('@overleaf/logger')
+const { promisify } = require('@overleaf/promise-utils')
+const { fetchJson } = require('@overleaf/fetch-utils')
 
-export const InstitutionSchema = new Schema(
+const InstitutionSchema = new Schema(
   {
     v1Id: { type: Number, required: true },
     managerIds: [{ type: ObjectId, ref: 'User' }],
@@ -45,4 +45,5 @@ InstitutionSchema.method(
   promisify(InstitutionSchema.methods.fetchV1Data)
 )
 
-export const Institution = mongoose.model('Institution', InstitutionSchema)
+exports.Institution = mongoose.model('Institution', InstitutionSchema)
+exports.InstitutionSchema = InstitutionSchema

+ 5 - 3
services/web/app/src/models/OauthAccessToken.mjs → services/web/app/src/models/OauthAccessToken.js

@@ -1,9 +1,9 @@
-import mongoose from '../infrastructure/Mongoose.js'
+const mongoose = require('../infrastructure/Mongoose')
 
 const { Schema } = mongoose
 const { ObjectId } = Schema
 
-export const OauthAccessTokenSchema = new Schema(
+const OauthAccessTokenSchema = new Schema(
   {
     accessToken: String,
     accessTokenPartial: String,
@@ -24,7 +24,9 @@ export const OauthAccessTokenSchema = new Schema(
   }
 )
 
-export const OauthAccessToken = mongoose.model(
+exports.OauthAccessToken = mongoose.model(
   'OauthAccessToken',
   OauthAccessTokenSchema
 )
+
+exports.OauthAccessTokenSchema = OauthAccessTokenSchema

Некоторые файлы не были показаны из-за большого количества измененных файлов