Преглед на файлове

Update paths

GitOrigin-RevId: a9474c8f36e8b287de4dd8fda29bc082001444ac
Andrew Rumble преди 10 месеца
родител
ревизия
f02f6475ac
променени са 100 файла, в които са добавени 235 реда и са изтрити 234 реда
  1. 1 1
      services/web/app.mjs
  2. 1 1
      services/web/app/src/Features/Analytics/AnalyticsRouter.mjs
  3. 3 3
      services/web/app/src/Features/Authorization/AuthorizationMiddleware.mjs
  4. 1 1
      services/web/app/src/Features/Captcha/CaptchaMiddleware.mjs
  5. 5 4
      services/web/app/src/Features/Collaborators/CollaboratorsController.mjs
  6. 4 4
      services/web/app/src/Features/Collaborators/CollaboratorsInviteController.mjs
  7. 3 3
      services/web/app/src/Features/Collaborators/CollaboratorsInviteHandler.mjs
  8. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsRouter.mjs
  9. 3 3
      services/web/app/src/Features/Collaborators/OwnershipTransferHandler.mjs
  10. 2 2
      services/web/app/src/Features/Compile/ClsiCacheController.mjs
  11. 4 4
      services/web/app/src/Features/Compile/ClsiManager.mjs
  12. 1 1
      services/web/app/src/Features/Compile/ClsiStateManager.mjs
  13. 1 1
      services/web/app/src/Features/Compile/CompileController.mjs
  14. 2 2
      services/web/app/src/Features/Compile/CompileManager.mjs
  15. 1 1
      services/web/app/src/Features/Contacts/ContactRouter.mjs
  16. 2 2
      services/web/app/src/Features/DocumentUpdater/DocumentUpdaterController.mjs
  17. 4 4
      services/web/app/src/Features/Documents/DocumentController.mjs
  18. 2 2
      services/web/app/src/Features/Downloads/ProjectDownloadsController.mjs
  19. 3 3
      services/web/app/src/Features/Downloads/ProjectZipStreamManager.mjs
  20. 5 5
      services/web/app/src/Features/Editor/EditorHttpController.mjs
  21. 1 1
      services/web/app/src/Features/Editor/EditorRouter.mjs
  22. 3 3
      services/web/app/src/Features/Exports/ExportsHandler.mjs
  23. 2 2
      services/web/app/src/Features/FileStore/FileStoreController.mjs
  24. 4 4
      services/web/app/src/Features/History/HistoryController.mjs
  25. 3 3
      services/web/app/src/Features/History/HistoryOTMigration.mjs
  26. 2 2
      services/web/app/src/Features/History/HistoryRangesSupportMigration.mjs
  27. 1 1
      services/web/app/src/Features/History/HistoryRouter.mjs
  28. 7 7
      services/web/app/src/Features/History/RestoreManager.mjs
  29. 2 2
      services/web/app/src/Features/InactiveData/InactiveProjectManager.mjs
  30. 3 3
      services/web/app/src/Features/LinkedFiles/LinkedFilesHandler.mjs
  31. 1 1
      services/web/app/src/Features/LinkedFiles/LinkedFilesRouter.mjs
  32. 4 4
      services/web/app/src/Features/LinkedFiles/ProjectFileAgent.mjs
  33. 1 1
      services/web/app/src/Features/LinkedFiles/ProjectOutputFileAgent.mjs
  34. 2 2
      services/web/app/src/Features/Metadata/MetaHandler.mjs
  35. 1 1
      services/web/app/src/Features/PasswordReset/PasswordResetController.mjs
  36. 1 1
      services/web/app/src/Features/PasswordReset/PasswordResetRouter.mjs
  37. 1 1
      services/web/app/src/Features/Project/ProjectApiController.mjs
  38. 11 10
      services/web/app/src/Features/Project/ProjectController.mjs
  39. 10 10
      services/web/app/src/Features/Project/ProjectDuplicator.mjs
  40. 2 2
      services/web/app/src/Features/Project/ProjectEntityRestoreHandler.mjs
  41. 3 3
      services/web/app/src/Features/Project/ProjectHistoryHandler.mjs
  42. 1 1
      services/web/app/src/Features/Project/ProjectListController.mjs
  43. 2 2
      services/web/app/src/Features/References/ReferencesHandler.mjs
  44. 2 2
      services/web/app/src/Features/ServerAdmin/AdminController.mjs
  45. 3 3
      services/web/app/src/Features/Subscription/SubscriptionController.mjs
  46. 1 1
      services/web/app/src/Features/Subscription/SubscriptionGroupHandler.mjs
  47. 1 1
      services/web/app/src/Features/Subscription/SubscriptionRouter.mjs
  48. 1 1
      services/web/app/src/Features/Subscription/TeamInvitesController.mjs
  49. 1 1
      services/web/app/src/Features/Templates/TemplatesController.mjs
  50. 1 1
      services/web/app/src/Features/Templates/TemplatesRouter.mjs
  51. 2 2
      services/web/app/src/Features/ThirdPartyDataStore/TpdsController.mjs
  52. 4 4
      services/web/app/src/Features/ThirdPartyDataStore/TpdsUpdateHandler.mjs
  53. 2 2
      services/web/app/src/Features/ThirdPartyDataStore/UpdateMerger.mjs
  54. 8 7
      services/web/app/src/Features/TokenAccess/TokenAccessController.mjs
  55. 1 1
      services/web/app/src/Features/TokenAccess/TokenAccessRouter.mjs
  56. 4 4
      services/web/app/src/Features/Uploads/ProjectUploadController.mjs
  57. 1 1
      services/web/app/src/Features/Uploads/UploadsRouter.mjs
  58. 2 2
      services/web/app/src/Features/User/UserController.mjs
  59. 1 1
      services/web/app/src/Features/User/UserCreator.mjs
  60. 1 1
      services/web/app/src/Features/User/UserEmailsController.mjs
  61. 1 1
      services/web/app/src/Features/User/UserPagesController.mjs
  62. 3 4
      services/web/app/src/Features/UserMembership/UserMembershipAuthorization.mjs
  63. 6 7
      services/web/app/src/infrastructure/ExpressLocals.mjs
  64. 3 2
      services/web/app/src/infrastructure/Server.mjs
  65. 1 1
      services/web/app/src/infrastructure/SiteAdminHandler.mjs
  66. 1 1
      services/web/app/src/router.mjs
  67. 5 4
      services/web/modules/history-v1/test/acceptance/src/ProjectStructureTests.mjs
  68. 5 6
      services/web/modules/launchpad/app/src/LaunchpadController.mjs
  69. 1 1
      services/web/modules/launchpad/app/src/LaunchpadRouter.mjs
  70. 1 1
      services/web/modules/launchpad/test/unit/src/LaunchpadController.test.mjs
  71. 1 1
      services/web/modules/server-ce-scripts/scripts/delete-user.mjs
  72. 1 1
      services/web/modules/server-ce-scripts/scripts/export-user-projects.mjs
  73. 1 1
      services/web/modules/user-activate/app/src/UserActivateRouter.mjs
  74. 2 2
      services/web/scripts/attach_dangling_comments_to_doc.mjs
  75. 4 4
      services/web/scripts/check_project_files.mjs
  76. 1 1
      services/web/scripts/clear_project_tokens.mjs
  77. 1 1
      services/web/scripts/convert_doc_to_file.mjs
  78. 2 2
      services/web/scripts/count_files_in_projects.mjs
  79. 3 3
      services/web/scripts/count_project_size.mjs
  80. 4 4
      services/web/scripts/create_project.mjs
  81. 2 2
      services/web/scripts/delete_dangling_comments.mjs
  82. 2 2
      services/web/scripts/delete_dangling_file_refs.mjs
  83. 1 1
      services/web/scripts/delete_orphaned_doc_comment_ranges.mjs
  84. 2 2
      services/web/scripts/e2e_test_setup.mjs
  85. 2 3
      services/web/scripts/fix_malformed_filetree.mjs
  86. 3 3
      services/web/scripts/fix_oversized_docs.mjs
  87. 1 1
      services/web/scripts/force_doc_flush.mjs
  88. 1 1
      services/web/scripts/recover_docs_from_redis.mjs
  89. 1 1
      services/web/scripts/restore_orphaned_docs.mjs
  90. 1 1
      services/web/scripts/soft_delete_project.mjs
  91. 1 1
      services/web/scripts/stress_test.mjs
  92. 1 1
      services/web/scripts/undelete_project_to_user.mjs
  93. 1 1
      services/web/test/acceptance/src/HistoryTests.mjs
  94. 3 3
      services/web/test/acceptance/src/ProjectStructureMongoLockTest.mjs
  95. 1 1
      services/web/test/acceptance/src/ProjectStructureTests.mjs
  96. 1 1
      services/web/test/acceptance/src/SecurityHeadersTests.mjs
  97. 1 1
      services/web/test/acceptance/src/TpdsUpdateTests.mjs
  98. 4 4
      services/web/test/unit/src/Collaborators/CollaboratorsController.test.mjs
  99. 3 3
      services/web/test/unit/src/Collaborators/CollaboratorsInviteController.test.mjs
  100. 3 3
      services/web/test/unit/src/Collaborators/CollaboratorsInviteHandler.test.mjs

+ 1 - 1
services/web/app.mjs

@@ -6,7 +6,7 @@ import metrics from '@overleaf/metrics'
 import Settings from '@overleaf/settings'
 import logger from '@overleaf/logger'
 import PlansLocator from './app/src/Features/Subscription/PlansLocator.js'
-import HistoryManager from './app/src/Features/History/HistoryManager.js'
+import HistoryManager from './app/src/Features/History/HistoryManager.mjs'
 import SiteAdminHandler from './app/src/infrastructure/SiteAdminHandler.mjs'
 import http from 'node:http'
 import https from 'node:https'

+ 1 - 1
services/web/app/src/Features/Analytics/AnalyticsRouter.mjs

@@ -1,4 +1,4 @@
-import AuthenticationController from './../Authentication/AuthenticationController.js'
+import AuthenticationController from './../Authentication/AuthenticationController.mjs'
 import AnalyticsController from './AnalyticsController.mjs'
 import AnalyticsProxy from './AnalyticsProxy.mjs'
 import { RateLimiter } from '../../infrastructure/RateLimiter.js'

+ 3 - 3
services/web/app/src/Features/Authorization/AuthorizationMiddleware.mjs

@@ -1,14 +1,14 @@
-import AuthorizationManager from './AuthorizationManager.js'
+import AuthorizationManager from './AuthorizationManager.mjs'
 import logger from '@overleaf/logger'
 import mongodb from 'mongodb-legacy'
 
 import Errors from '../Errors/Errors.js'
 import HttpErrorHandler from '../Errors/HttpErrorHandler.js'
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import SessionManager from '../Authentication/SessionManager.js'
 import TokenAccessHandler from '../TokenAccess/TokenAccessHandler.js'
 import { expressify } from '@overleaf/promise-utils'
-import AdminAuthorizationHelper from '../Helpers/AdminAuthorizationHelper.js'
+import AdminAuthorizationHelper from '../Helpers/AdminAuthorizationHelper.mjs'
 import UrlHelper from '../Helpers/UrlHelper.js'
 
 const { ObjectId } = mongodb

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

@@ -4,7 +4,7 @@ import Settings from '@overleaf/settings'
 import Metrics from '@overleaf/metrics'
 import OError from '@overleaf/o-error'
 import DeviceHistory from './DeviceHistory.mjs'
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import { expressify } from '@overleaf/promise-utils'
 import EmailsHelper from '../Helpers/EmailHelper.js'
 

+ 5 - 4
services/web/app/src/Features/Collaborators/CollaboratorsController.mjs

@@ -1,8 +1,8 @@
 import OError from '@overleaf/o-error'
 import HttpErrorHandler from '../../Features/Errors/HttpErrorHandler.js'
 import mongodb from 'mongodb-legacy'
-import CollaboratorsHandler from './CollaboratorsHandler.js'
-import CollaboratorsGetter from './CollaboratorsGetter.js'
+import CollaboratorsHandler from './CollaboratorsHandler.mjs'
+import CollaboratorsGetter from './CollaboratorsGetter.mjs'
 import OwnershipTransferHandler from './OwnershipTransferHandler.mjs'
 import SessionManager from '../Authentication/SessionManager.js'
 import EditorRealTimeController from '../Editor/EditorRealTimeController.js'
@@ -10,14 +10,15 @@ import TagsHandler from '../Tags/TagsHandler.js'
 import Errors from '../Errors/Errors.js'
 import logger from '@overleaf/logger'
 import { expressify } from '@overleaf/promise-utils'
-import { hasAdminAccess } from '../Helpers/AdminAuthorizationHelper.js'
+import AdminAuthorizationHelper from '../Helpers/AdminAuthorizationHelper.mjs'
 import TokenAccessHandler from '../TokenAccess/TokenAccessHandler.js'
 import ProjectAuditLogHandler from '../Project/ProjectAuditLogHandler.mjs'
-import LimitationsManager from '../Subscription/LimitationsManager.js'
+import LimitationsManager from '../Subscription/LimitationsManager.mjs'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
 import { z, zz, validateReq } from '../../infrastructure/Validation.js'
 import Features from '../../infrastructure/Features.js'
 
+const { hasAdminAccess } = AdminAuthorizationHelper
 const ObjectId = mongodb.ObjectId
 
 export default {

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

@@ -1,7 +1,7 @@
-import ProjectGetter from '../Project/ProjectGetter.js'
-import LimitationsManager from '../Subscription/LimitationsManager.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
+import LimitationsManager from '../Subscription/LimitationsManager.mjs'
 import UserGetter from '../User/UserGetter.js'
-import CollaboratorsGetter from './CollaboratorsGetter.js'
+import CollaboratorsGetter from './CollaboratorsGetter.mjs'
 import CollaboratorsInviteHandler from './CollaboratorsInviteHandler.mjs'
 import CollaboratorsInviteGetter from './CollaboratorsInviteGetter.js'
 import logger from '@overleaf/logger'
@@ -15,7 +15,7 @@ import { z, zz, validateReq } from '../../infrastructure/Validation.js'
 import { expressify } from '@overleaf/promise-utils'
 import ProjectAuditLogHandler from '../Project/ProjectAuditLogHandler.mjs'
 import Errors from '../Errors/Errors.js'
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
 
 // This rate limiter allows a different number of requests depending on the

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

@@ -2,14 +2,14 @@ import { callbackify } from 'node:util'
 import { ProjectInvite } from '../../models/ProjectInvite.js'
 import logger from '@overleaf/logger'
 import CollaboratorsEmailHandler from './CollaboratorsEmailHandler.mjs'
-import CollaboratorsHandler from './CollaboratorsHandler.js'
+import CollaboratorsHandler from './CollaboratorsHandler.mjs'
 import CollaboratorsInviteGetter from './CollaboratorsInviteGetter.js'
 import CollaboratorsInviteHelper from './CollaboratorsInviteHelper.js'
 import UserGetter from '../User/UserGetter.js'
-import ProjectGetter from '../Project/ProjectGetter.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
 import NotificationsBuilder from '../Notifications/NotificationsBuilder.js'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
-import LimitationsManager from '../Subscription/LimitationsManager.js'
+import LimitationsManager from '../Subscription/LimitationsManager.mjs'
 import ProjectAuditLogHandler from '../Project/ProjectAuditLogHandler.mjs'
 import _ from 'lodash'
 

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

@@ -1,5 +1,5 @@
 import CollaboratorsController from './CollaboratorsController.mjs'
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import AuthorizationMiddleware from '../Authorization/AuthorizationMiddleware.mjs'
 import CollaboratorsInviteController from './CollaboratorsInviteController.mjs'
 import { RateLimiter } from '../../infrastructure/RateLimiter.js'

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

@@ -1,12 +1,12 @@
 import logger from '@overleaf/logger'
 import { Project } from '../../models/Project.js'
-import ProjectGetter from '../Project/ProjectGetter.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
 import UserGetter from '../User/UserGetter.js'
-import CollaboratorsHandler from './CollaboratorsHandler.js'
+import CollaboratorsHandler from './CollaboratorsHandler.mjs'
 import EmailHandler from '../Email/EmailHandler.js'
 import Errors from '../Errors/Errors.js'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
-import TpdsProjectFlusher from '../ThirdPartyDataStore/TpdsProjectFlusher.js'
+import TpdsProjectFlusher from '../ThirdPartyDataStore/TpdsProjectFlusher.mjs'
 import ProjectAuditLogHandler from '../Project/ProjectAuditLogHandler.mjs'
 import AnalyticsManager from '../Analytics/AnalyticsManager.js'
 import OError from '@overleaf/o-error'

+ 2 - 2
services/web/app/src/Features/Compile/ClsiCacheController.mjs

@@ -6,11 +6,11 @@ import {
 import Path from 'node:path'
 import { pipeline } from 'node:stream/promises'
 import logger from '@overleaf/logger'
-import ClsiCacheManager from './ClsiCacheManager.js'
+import ClsiCacheManager from './ClsiCacheManager.mjs'
 import CompileController from './CompileController.mjs'
 import { expressify } from '@overleaf/promise-utils'
 import ClsiCacheHandler from './ClsiCacheHandler.js'
-import ProjectGetter from '../Project/ProjectGetter.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
 import { MeteredStream } from '@overleaf/stream-utils'
 import Metrics from '@overleaf/metrics'
 

+ 4 - 4
services/web/app/src/Features/Compile/ClsiManager.mjs

@@ -7,8 +7,8 @@ import {
   RequestFailedError,
 } from '@overleaf/fetch-utils'
 import Settings from '@overleaf/settings'
-import ProjectGetter from '../Project/ProjectGetter.js'
-import ProjectEntityHandler from '../Project/ProjectEntityHandler.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
+import ProjectEntityHandler from '../Project/ProjectEntityHandler.mjs'
 import logger from '@overleaf/logger'
 import OError from '@overleaf/o-error'
 import { Cookie } from 'tough-cookie'
@@ -16,11 +16,11 @@ import ClsiCookieManagerFactory from './ClsiCookieManager.mjs'
 import ClsiStateManager from './ClsiStateManager.mjs'
 import _ from 'lodash'
 import ClsiFormatChecker from './ClsiFormatChecker.mjs'
-import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.js'
+import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import Metrics from '@overleaf/metrics'
 import Errors from '../Errors/Errors.js'
 import ClsiCacheHandler from './ClsiCacheHandler.js'
-import HistoryManager from '../History/HistoryManager.js'
+import HistoryManager from '../History/HistoryManager.mjs'
 import SplitTestHandler from '../SplitTests/SplitTestHandler.js'
 import AnalyticsManager from '../Analytics/AnalyticsManager.js'
 

+ 1 - 1
services/web/app/src/Features/Compile/ClsiStateManager.mjs

@@ -9,7 +9,7 @@
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
 import crypto from 'node:crypto'
-import ProjectEntityHandler from '../Project/ProjectEntityHandler.js'
+import ProjectEntityHandler from '../Project/ProjectEntityHandler.mjs'
 
 // The "state" of a project is a hash of the relevant attributes in the
 // project object in this case we only need the rootFolder.

+ 1 - 1
services/web/app/src/Features/Compile/CompileController.mjs

@@ -3,7 +3,7 @@ import { pipeline } from 'node:stream/promises'
 import { Cookie } from 'tough-cookie'
 import OError from '@overleaf/o-error'
 import Metrics from '@overleaf/metrics'
-import ProjectGetter from '../Project/ProjectGetter.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
 import CompileManager from './CompileManager.mjs'
 import ClsiManager from './ClsiManager.mjs'
 import logger from '@overleaf/logger'

+ 2 - 2
services/web/app/src/Features/Compile/CompileManager.mjs

@@ -1,8 +1,8 @@
 import Crypto from 'node:crypto'
 import Settings from '@overleaf/settings'
 import RedisWrapper from '../../infrastructure/RedisWrapper.js'
-import ProjectGetter from '../Project/ProjectGetter.js'
-import ProjectRootDocManager from '../Project/ProjectRootDocManager.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
+import ProjectRootDocManager from '../Project/ProjectRootDocManager.mjs'
 import UserGetter from '../User/UserGetter.js'
 import ClsiManager from './ClsiManager.mjs'
 import Metrics from '@overleaf/metrics'

+ 1 - 1
services/web/app/src/Features/Contacts/ContactRouter.mjs

@@ -1,4 +1,4 @@
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import SessionManager from '../Authentication/SessionManager.js'
 import ContactController from './ContactController.mjs'
 import Settings from '@overleaf/settings'

+ 2 - 2
services/web/app/src/Features/DocumentUpdater/DocumentUpdaterController.mjs

@@ -1,6 +1,6 @@
 import logger from '@overleaf/logger'
-import DocumentUpdaterHandler from './DocumentUpdaterHandler.js'
-import ProjectLocator from '../Project/ProjectLocator.js'
+import DocumentUpdaterHandler from './DocumentUpdaterHandler.mjs'
+import ProjectLocator from '../Project/ProjectLocator.mjs'
 import { plainTextResponse } from '../../infrastructure/Response.js'
 import { expressify } from '@overleaf/promise-utils'
 

+ 4 - 4
services/web/app/src/Features/Documents/DocumentController.mjs

@@ -1,8 +1,8 @@
 import ChatApiHandler from '../Chat/ChatApiHandler.js'
-import ProjectGetter from '../Project/ProjectGetter.js'
-import ProjectLocator from '../Project/ProjectLocator.js'
-import ProjectEntityHandler from '../Project/ProjectEntityHandler.js'
-import ProjectEntityUpdateHandler from '../Project/ProjectEntityUpdateHandler.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
+import ProjectLocator from '../Project/ProjectLocator.mjs'
+import ProjectEntityHandler from '../Project/ProjectEntityHandler.mjs'
+import ProjectEntityUpdateHandler from '../Project/ProjectEntityUpdateHandler.mjs'
 import logger from '@overleaf/logger'
 import _ from 'lodash'
 import { plainTextResponse } from '../../infrastructure/Response.js'

+ 2 - 2
services/web/app/src/Features/Downloads/ProjectDownloadsController.mjs

@@ -11,9 +11,9 @@
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
 import Metrics from '@overleaf/metrics'
-import ProjectGetter from '../Project/ProjectGetter.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectZipStreamManager from './ProjectZipStreamManager.mjs'
-import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.js'
+import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import { prepareZipAttachment } from '../../infrastructure/Response.js'
 
 let ProjectDownloadsController

+ 3 - 3
services/web/app/src/Features/Downloads/ProjectZipStreamManager.mjs

@@ -1,9 +1,9 @@
 import archiver from 'archiver'
 import async from 'async'
 import logger from '@overleaf/logger'
-import ProjectEntityHandler from '../Project/ProjectEntityHandler.js'
-import ProjectGetter from '../Project/ProjectGetter.js'
-import HistoryManager from '../History/HistoryManager.js'
+import ProjectEntityHandler from '../Project/ProjectEntityHandler.mjs'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
+import HistoryManager from '../History/HistoryManager.mjs'
 let ProjectZipStreamManager
 
 export default ProjectZipStreamManager = {

+ 5 - 5
services/web/app/src/Features/Editor/EditorHttpController.mjs

@@ -1,7 +1,7 @@
-import ProjectDeleter from '../Project/ProjectDeleter.js'
-import EditorController from './EditorController.js'
-import ProjectGetter from '../Project/ProjectGetter.js'
-import AuthorizationManager from '../Authorization/AuthorizationManager.js'
+import ProjectDeleter from '../Project/ProjectDeleter.mjs'
+import EditorController from './EditorController.mjs'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
+import AuthorizationManager from '../Authorization/AuthorizationManager.mjs'
 import ProjectEditorHandler from '../Project/ProjectEditorHandler.js'
 import Metrics from '@overleaf/metrics'
 import CollaboratorsInviteGetter from '../Collaborators/CollaboratorsInviteGetter.js'
@@ -10,7 +10,7 @@ import SessionManager from '../Authentication/SessionManager.js'
 import Errors from '../Errors/Errors.js'
 import { expressify } from '@overleaf/promise-utils'
 import Settings from '@overleaf/settings'
-import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.js'
+import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.mjs'
 import { z, zz, validateReq } from '../../infrastructure/Validation.js'
 
 const ProjectAccess = CollaboratorsGetter.ProjectAccess

+ 1 - 1
services/web/app/src/Features/Editor/EditorRouter.mjs

@@ -1,5 +1,5 @@
 import EditorHttpController from './EditorHttpController.mjs'
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import AuthorizationMiddleware from '../Authorization/AuthorizationMiddleware.mjs'
 import { RateLimiter } from '../../infrastructure/RateLimiter.js'
 import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'

+ 3 - 3
services/web/app/src/Features/Exports/ExportsHandler.mjs

@@ -12,10 +12,10 @@
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
 import OError from '@overleaf/o-error'
-import ProjectGetter from '../Project/ProjectGetter.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectHistoryHandler from '../Project/ProjectHistoryHandler.mjs'
-import ProjectLocator from '../Project/ProjectLocator.js'
-import ProjectRootDocManager from '../Project/ProjectRootDocManager.js'
+import ProjectLocator from '../Project/ProjectLocator.mjs'
+import ProjectRootDocManager from '../Project/ProjectRootDocManager.mjs'
 import UserGetter from '../User/UserGetter.js'
 import logger from '@overleaf/logger'
 import settings from '@overleaf/settings'

+ 2 - 2
services/web/app/src/Features/FileStore/FileStoreController.mjs

@@ -4,8 +4,8 @@ import { pipeline } from 'node:stream/promises'
 import logger from '@overleaf/logger'
 import { expressify } from '@overleaf/promise-utils'
 import Metrics from '@overleaf/metrics'
-import ProjectLocator from '../Project/ProjectLocator.js'
-import HistoryManager from '../History/HistoryManager.js'
+import ProjectLocator from '../Project/ProjectLocator.mjs'
+import HistoryManager from '../History/HistoryManager.mjs'
 import Errors from '../Errors/Errors.js'
 import { preparePlainTextResponse } from '../../infrastructure/Response.js'
 

+ 4 - 4
services/web/app/src/Features/History/HistoryController.mjs

@@ -17,11 +17,11 @@ import {
 import settings from '@overleaf/settings'
 import SessionManager from '../Authentication/SessionManager.js'
 import UserGetter from '../User/UserGetter.js'
-import ProjectGetter from '../Project/ProjectGetter.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
 import Errors from '../Errors/Errors.js'
-import HistoryManager from './HistoryManager.js'
-import ProjectDetailsHandler from '../Project/ProjectDetailsHandler.js'
-import ProjectEntityUpdateHandler from '../Project/ProjectEntityUpdateHandler.js'
+import HistoryManager from './HistoryManager.mjs'
+import ProjectDetailsHandler from '../Project/ProjectDetailsHandler.mjs'
+import ProjectEntityUpdateHandler from '../Project/ProjectEntityUpdateHandler.mjs'
 import RestoreManager from './RestoreManager.mjs'
 import { prepareZipAttachment } from '../../infrastructure/Response.js'
 import Features from '../../infrastructure/Features.js'

+ 3 - 3
services/web/app/src/Features/History/HistoryOTMigration.mjs

@@ -1,6 +1,6 @@
-import ProjectGetter from '../Project/ProjectGetter.js'
-import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.js'
-import HistoryManager from '../History/HistoryManager.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
+import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
+import HistoryManager from '../History/HistoryManager.mjs'
 import * as RealTimeHandler from '../References/RealTime/RealTimeHandler.mjs'
 import ProjectOptionsHandler from '../Project/ProjectOptionsHandler.js'
 import {

+ 2 - 2
services/web/app/src/Features/History/HistoryRangesSupportMigration.mjs

@@ -3,8 +3,8 @@
 import { callbackify } from 'node:util'
 import OError from '@overleaf/o-error'
 import logger from '@overleaf/logger'
-import HistoryManager from '../History/HistoryManager.js'
-import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.js'
+import HistoryManager from '../History/HistoryManager.mjs'
+import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import DocstoreManager from '../Docstore/DocstoreManager.js'
 import ProjectOptionsHandler from '../Project/ProjectOptionsHandler.js'
 import mongodb from '../../infrastructure/mongodb.js'

+ 1 - 1
services/web/app/src/Features/History/HistoryRouter.mjs

@@ -2,7 +2,7 @@
 
 import Settings from '@overleaf/settings'
 import { RateLimiter } from '../../infrastructure/RateLimiter.js'
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import AuthorizationMiddleware from '../Authorization/AuthorizationMiddleware.mjs'
 import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'
 import HistoryController from './HistoryController.mjs'

+ 7 - 7
services/web/app/src/Features/History/RestoreManager.mjs

@@ -2,23 +2,23 @@ import Settings from '@overleaf/settings'
 import Path from 'node:path'
 import FileWriter from '../../infrastructure/FileWriter.js'
 import Metrics from '../../infrastructure/Metrics.js'
-import FileSystemImportManager from '../Uploads/FileSystemImportManager.js'
+import FileSystemImportManager from '../Uploads/FileSystemImportManager.mjs'
 import FileTypeManager from '../Uploads/FileTypeManager.js'
-import EditorController from '../Editor/EditorController.js'
+import EditorController from '../Editor/EditorController.mjs'
 import Errors from '../Errors/Errors.js'
 import moment from 'moment'
 import { callbackifyAll } from '@overleaf/promise-utils'
-import ProjectLocator from '../Project/ProjectLocator.js'
-import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.js'
+import ProjectLocator from '../Project/ProjectLocator.mjs'
+import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import ChatApiHandler from '../Chat/ChatApiHandler.js'
 import DocstoreManager from '../Docstore/DocstoreManager.js'
 import logger from '@overleaf/logger'
 import EditorRealTimeController from '../Editor/EditorRealTimeController.js'
 import ChatManager from '../Chat/ChatManager.mjs'
 import OError from '@overleaf/o-error'
-import ProjectGetter from '../Project/ProjectGetter.js'
-import ProjectEntityHandler from '../Project/ProjectEntityHandler.js'
-import HistoryManager from './HistoryManager.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
+import ProjectEntityHandler from '../Project/ProjectEntityHandler.mjs'
+import HistoryManager from './HistoryManager.mjs'
 import { Snapshot, getDocUpdaterCompatibleRanges } from 'overleaf-editor-core'
 
 async function getCommentThreadIds(projectId) {

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

@@ -1,8 +1,8 @@
 import OError from '@overleaf/o-error'
 import logger from '@overleaf/logger'
 import DocstoreManager from '../Docstore/DocstoreManager.js'
-import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.js'
-import ProjectGetter from '../Project/ProjectGetter.js'
+import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectUpdateHandler from '../Project/ProjectUpdateHandler.js'
 import { Project } from '../../models/Project.js'
 import Modules from '../../infrastructure/Modules.js'

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

@@ -1,8 +1,8 @@
 import FileWriter from '../../infrastructure/FileWriter.js'
-import EditorController from '../Editor/EditorController.js'
-import ProjectLocator from '../Project/ProjectLocator.js'
+import EditorController from '../Editor/EditorController.mjs'
+import ProjectLocator from '../Project/ProjectLocator.mjs'
 import { Project } from '../../models/Project.js'
-import ProjectGetter from '../Project/ProjectGetter.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/LinkedFiles/LinkedFilesRouter.mjs

@@ -1,5 +1,5 @@
 import AuthorizationMiddleware from '../Authorization/AuthorizationMiddleware.mjs'
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import { RateLimiter } from '../../infrastructure/RateLimiter.js'
 import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'
 import LinkedFilesController from './LinkedFilesController.mjs'

+ 4 - 4
services/web/app/src/Features/LinkedFiles/ProjectFileAgent.mjs

@@ -10,15 +10,15 @@
  * DS207: Consider shorter variations of null checks
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
-import AuthorizationManager from '../Authorization/AuthorizationManager.js'
-import ProjectLocator from '../Project/ProjectLocator.js'
+import AuthorizationManager from '../Authorization/AuthorizationManager.mjs'
+import ProjectLocator from '../Project/ProjectLocator.mjs'
 import DocstoreManager from '../Docstore/DocstoreManager.js'
-import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.js'
+import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import _ from 'lodash'
 import LinkedFilesHandler from './LinkedFilesHandler.mjs'
 import LinkedFilesErrors from './LinkedFilesErrors.mjs'
 import { promisify } from '@overleaf/promise-utils'
-import HistoryManager from '../History/HistoryManager.js'
+import HistoryManager from '../History/HistoryManager.mjs'
 
 const {
   BadDataError,

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

@@ -1,4 +1,4 @@
-import AuthorizationManager from '../Authorization/AuthorizationManager.js'
+import AuthorizationManager from '../Authorization/AuthorizationManager.mjs'
 import CompileManager from '../Compile/CompileManager.mjs'
 import ClsiManager from '../Compile/ClsiManager.mjs'
 import ProjectFileAgent from './ProjectFileAgent.mjs'

+ 2 - 2
services/web/app/src/Features/Metadata/MetaHandler.mjs

@@ -1,5 +1,5 @@
-import ProjectEntityHandler from '../Project/ProjectEntityHandler.js'
-import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.js'
+import ProjectEntityHandler from '../Project/ProjectEntityHandler.mjs'
+import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import packageMapping from './packageMapping.mjs'
 import { callbackify } from '@overleaf/promise-utils'
 

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

@@ -1,5 +1,5 @@
 import PasswordResetHandler from './PasswordResetHandler.mjs'
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import AuthenticationManager from '../Authentication/AuthenticationManager.js'
 import SessionManager from '../Authentication/SessionManager.js'
 import UserGetter from '../User/UserGetter.js'

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

@@ -1,5 +1,5 @@
 import PasswordResetController from './PasswordResetController.mjs'
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import CaptchaMiddleware from '../../Features/Captcha/CaptchaMiddleware.mjs'
 import { RateLimiter } from '../../infrastructure/RateLimiter.js'
 import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'

+ 1 - 1
services/web/app/src/Features/Project/ProjectApiController.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 ProjectDetailsHandler from './ProjectDetailsHandler.js'
+import ProjectDetailsHandler from './ProjectDetailsHandler.mjs'
 
 import logger from '@overleaf/logger'
 

+ 11 - 10
services/web/app/src/Features/Project/ProjectController.mjs

@@ -6,28 +6,28 @@ import pProps from 'p-props'
 import logger from '@overleaf/logger'
 import { expressify } from '@overleaf/promise-utils'
 import mongodb from 'mongodb-legacy'
-import ProjectDeleter from './ProjectDeleter.js'
+import ProjectDeleter from './ProjectDeleter.mjs'
 import ProjectDuplicator from './ProjectDuplicator.mjs'
-import ProjectCreationHandler from './ProjectCreationHandler.js'
-import EditorController from '../Editor/EditorController.js'
+import ProjectCreationHandler from './ProjectCreationHandler.mjs'
+import EditorController from '../Editor/EditorController.mjs'
 import ProjectHelper from './ProjectHelper.js'
 import metrics from '@overleaf/metrics'
 import { User } from '../../models/User.js'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.js'
 import { isPaidSubscription } from '../Subscription/SubscriptionHelper.js'
-import LimitationsManager from '../Subscription/LimitationsManager.js'
+import LimitationsManager from '../Subscription/LimitationsManager.mjs'
 import Settings from '@overleaf/settings'
-import AuthorizationManager from '../Authorization/AuthorizationManager.js'
+import AuthorizationManager from '../Authorization/AuthorizationManager.mjs'
 import InactiveProjectManager from '../InactiveData/InactiveProjectManager.mjs'
 import ProjectUpdateHandler from './ProjectUpdateHandler.js'
-import ProjectGetter from './ProjectGetter.js'
+import ProjectGetter from './ProjectGetter.mjs'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
 import SessionManager from '../Authentication/SessionManager.js'
 import Sources from '../Authorization/Sources.js'
 import TokenAccessHandler from '../TokenAccess/TokenAccessHandler.js'
-import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.js'
-import ProjectEntityHandler from './ProjectEntityHandler.js'
-import TpdsProjectFlusher from '../ThirdPartyDataStore/TpdsProjectFlusher.js'
+import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.mjs'
+import ProjectEntityHandler from './ProjectEntityHandler.mjs'
+import TpdsProjectFlusher from '../ThirdPartyDataStore/TpdsProjectFlusher.mjs'
 import Features from '../../infrastructure/Features.js'
 import BrandVariationsHandler from '../BrandVariations/BrandVariationsHandler.mjs'
 import UserController from '../User/UserController.mjs'
@@ -36,7 +36,7 @@ import SplitTestHandler from '../SplitTests/SplitTestHandler.js'
 import SplitTestSessionHandler from '../SplitTests/SplitTestSessionHandler.js'
 import FeaturesUpdater from '../Subscription/FeaturesUpdater.js'
 import SpellingHandler from '../Spelling/SpellingHandler.mjs'
-import { hasAdminAccess } from '../Helpers/AdminAuthorizationHelper.js'
+import AdminAuthorizationHelper from '../Helpers/AdminAuthorizationHelper.mjs'
 import InstitutionsFeatures from '../Institutions/InstitutionsFeatures.js'
 import InstitutionsGetter from '../Institutions/InstitutionsGetter.mjs'
 import ProjectAuditLogHandler from './ProjectAuditLogHandler.mjs'
@@ -52,6 +52,7 @@ import SubscriptionController from '../Subscription/SubscriptionController.mjs'
 import { formatCurrency } from '../../util/currency.js'
 import UserSettingsHelper from './UserSettingsHelper.mjs'
 
+const { hasAdminAccess } = AdminAuthorizationHelper
 const { ObjectId } = mongodb
 /**
  * @import { GetProjectsRequest, GetProjectsResponse, Project } from "./types"

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

@@ -6,20 +6,20 @@ import { promiseMapWithLimit } from '@overleaf/promise-utils'
 import { Doc } from '../../models/Doc.js'
 import { File } from '../../models/File.js'
 import DocstoreManager from '../Docstore/DocstoreManager.js'
-import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.js'
-import HistoryManager from '../History/HistoryManager.js'
-import ProjectCreationHandler from './ProjectCreationHandler.js'
-import ProjectDeleter from './ProjectDeleter.js'
-import ProjectEntityMongoUpdateHandler from './ProjectEntityMongoUpdateHandler.js'
-import ProjectEntityUpdateHandler from './ProjectEntityUpdateHandler.js'
-import ProjectGetter from './ProjectGetter.js'
-import ProjectLocator from './ProjectLocator.js'
+import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
+import HistoryManager from '../History/HistoryManager.mjs'
+import ProjectCreationHandler from './ProjectCreationHandler.mjs'
+import ProjectDeleter from './ProjectDeleter.mjs'
+import ProjectEntityMongoUpdateHandler from './ProjectEntityMongoUpdateHandler.mjs'
+import ProjectEntityUpdateHandler from './ProjectEntityUpdateHandler.mjs'
+import ProjectGetter from './ProjectGetter.mjs'
+import ProjectLocator from './ProjectLocator.mjs'
 import ProjectOptionsHandler from './ProjectOptionsHandler.js'
 import SafePath from './SafePath.js'
-import TpdsProjectFlusher from '../ThirdPartyDataStore/TpdsProjectFlusher.js'
+import TpdsProjectFlusher from '../ThirdPartyDataStore/TpdsProjectFlusher.mjs'
 import _ from 'lodash'
 import TagsHandler from '../Tags/TagsHandler.js'
-import ClsiCacheManager from '../Compile/ClsiCacheManager.js'
+import ClsiCacheManager from '../Compile/ClsiCacheManager.mjs'
 import Modules from '../../infrastructure/Modules.js'
 
 export default {

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

@@ -1,7 +1,7 @@
 import { callbackify } from 'node:util'
 import Path from 'node:path'
-import ProjectEntityHandler from './ProjectEntityHandler.js'
-import EditorController from '../Editor/EditorController.js'
+import ProjectEntityHandler from './ProjectEntityHandler.mjs'
+import EditorController from '../Editor/EditorController.mjs'
 
 // generate a new name based on the original, with an optional label.
 // e.g. origname-20210101-122345.tex          (default)

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

@@ -1,7 +1,7 @@
 import { Project } from '../../models/Project.js'
-import ProjectDetailsHandler from './ProjectDetailsHandler.js'
-import HistoryManager from '../History/HistoryManager.js'
-import ProjectEntityUpdateHandler from './ProjectEntityUpdateHandler.js'
+import ProjectDetailsHandler from './ProjectDetailsHandler.mjs'
+import HistoryManager from '../History/HistoryManager.mjs'
+import ProjectEntityUpdateHandler from './ProjectEntityUpdateHandler.mjs'
 import { callbackify } from 'node:util'
 
 const ProjectHistoryHandler = {

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

@@ -5,7 +5,7 @@ import moment from 'moment'
 import Metrics from '@overleaf/metrics'
 import Settings from '@overleaf/settings'
 import ProjectHelper from './ProjectHelper.js'
-import ProjectGetter from './ProjectGetter.js'
+import ProjectGetter from './ProjectGetter.mjs'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
 import SessionManager from '../Authentication/SessionManager.js'
 import Sources from '../Authorization/Sources.js'

+ 2 - 2
services/web/app/src/Features/References/ReferencesHandler.mjs

@@ -17,9 +17,9 @@ import logger from '@overleaf/logger'
 import request from 'request'
 import settings from '@overleaf/settings'
 import Features from '../../infrastructure/Features.js'
-import ProjectGetter from '../Project/ProjectGetter.js'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
 import UserGetter from '../User/UserGetter.js'
-import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.js'
+import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import _ from 'lodash'
 import Async from 'async'
 import Errors from '../Errors/Errors.js'

+ 2 - 2
services/web/app/src/Features/ServerAdmin/AdminController.mjs

@@ -2,8 +2,8 @@ import logger from '@overleaf/logger'
 import http from 'node:http'
 import https from 'node:https'
 import Settings from '@overleaf/settings'
-import TpdsUpdateSender from '../ThirdPartyDataStore/TpdsUpdateSender.js'
-import TpdsProjectFlusher from '../ThirdPartyDataStore/TpdsProjectFlusher.js'
+import TpdsUpdateSender from '../ThirdPartyDataStore/TpdsUpdateSender.mjs'
+import TpdsProjectFlusher from '../ThirdPartyDataStore/TpdsProjectFlusher.mjs'
 import EditorRealTimeController from '../Editor/EditorRealTimeController.js'
 import SystemMessageManager from '../SystemMessages/SystemMessageManager.mjs'
 

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

@@ -1,10 +1,10 @@
 // @ts-check
 
 import SessionManager from '../Authentication/SessionManager.js'
-import SubscriptionHandler from './SubscriptionHandler.js'
+import SubscriptionHandler from './SubscriptionHandler.mjs'
 import SubscriptionHelper from './SubscriptionHelper.js'
 import SubscriptionViewModelBuilder from './SubscriptionViewModelBuilder.mjs'
-import LimitationsManager from './LimitationsManager.js'
+import LimitationsManager from './LimitationsManager.mjs'
 import RecurlyWrapper from './RecurlyWrapper.js'
 import Settings from '@overleaf/settings'
 import logger from '@overleaf/logger'
@@ -18,7 +18,7 @@ import { expressify } from '@overleaf/promise-utils'
 import OError from '@overleaf/o-error'
 import Errors from './Errors.js'
 import SplitTestHandler from '../SplitTests/SplitTestHandler.js'
-import AuthorizationManager from '../Authorization/AuthorizationManager.js'
+import AuthorizationManager from '../Authorization/AuthorizationManager.mjs'
 import Modules from '../../infrastructure/Modules.js'
 import async from 'async'
 import HttpErrorHandler from '../Errors/HttpErrorHandler.js'

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

@@ -8,7 +8,7 @@ import SubscriptionHelper from './SubscriptionHelper.js'
 import { Subscription } from '../../models/Subscription.js'
 import { User } from '../../models/User.js'
 import PlansLocator from './PlansLocator.js'
-import TeamInvitesHandler from './TeamInvitesHandler.js'
+import TeamInvitesHandler from './TeamInvitesHandler.mjs'
 import GroupPlansData from './GroupPlansData.js'
 import Modules from '../../infrastructure/Modules.js'
 import PaymentProviderEntities from './PaymentProviderEntities.js'

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

@@ -1,4 +1,4 @@
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import PermissionsController from '../Authorization/PermissionsController.mjs'
 import SubscriptionController from './SubscriptionController.mjs'
 import SubscriptionGroupController from './SubscriptionGroupController.mjs'

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

@@ -1,7 +1,7 @@
 import settings from '@overleaf/settings'
 import logger from '@overleaf/logger'
 import OError from '@overleaf/o-error'
-import TeamInvitesHandler from './TeamInvitesHandler.js'
+import TeamInvitesHandler from './TeamInvitesHandler.mjs'
 import SessionManager from '../Authentication/SessionManager.js'
 import SubscriptionLocator from './SubscriptionLocator.js'
 import SubscriptionHelper from './SubscriptionHelper.js'

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

@@ -1,6 +1,6 @@
 import path from 'node:path'
 import SessionManager from '../Authentication/SessionManager.js'
-import TemplatesManager from './TemplatesManager.js'
+import TemplatesManager from './TemplatesManager.mjs'
 import ProjectHelper from '../Project/ProjectHelper.js'
 import logger from '@overleaf/logger'
 import { expressify } from '@overleaf/promise-utils'

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

@@ -1,4 +1,4 @@
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import TemplatesController from './TemplatesController.mjs'
 import TemplatesMiddleware from './TemplatesMiddleware.mjs'
 import { RateLimiter } from '../../infrastructure/RateLimiter.js'

+ 2 - 2
services/web/app/src/Features/ThirdPartyDataStore/TpdsController.mjs

@@ -7,8 +7,8 @@ import Path from 'node:path'
 import metrics from '@overleaf/metrics'
 import NotificationsBuilder from '../Notifications/NotificationsBuilder.js'
 import SessionManager from '../Authentication/SessionManager.js'
-import ProjectCreationHandler from '../Project/ProjectCreationHandler.js'
-import ProjectDetailsHandler from '../Project/ProjectDetailsHandler.js'
+import ProjectCreationHandler from '../Project/ProjectCreationHandler.mjs'
+import ProjectDetailsHandler from '../Project/ProjectDetailsHandler.mjs'
 import HttpErrorHandler from '../Errors/HttpErrorHandler.js'
 import TpdsQueueManager from './TpdsQueueManager.mjs'
 

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

@@ -2,11 +2,11 @@ import { callbackify } from 'node:util'
 import UpdateMerger from './UpdateMerger.mjs'
 import logger from '@overleaf/logger'
 import NotificationsBuilder from '../Notifications/NotificationsBuilder.js'
-import ProjectCreationHandler from '../Project/ProjectCreationHandler.js'
-import ProjectDeleter from '../Project/ProjectDeleter.js'
-import ProjectGetter from '../Project/ProjectGetter.js'
+import ProjectCreationHandler from '../Project/ProjectCreationHandler.mjs'
+import ProjectDeleter from '../Project/ProjectDeleter.mjs'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectHelper from '../Project/ProjectHelper.js'
-import ProjectRootDocManager from '../Project/ProjectRootDocManager.js'
+import ProjectRootDocManager from '../Project/ProjectRootDocManager.mjs'
 import FileTypeManager from '../Uploads/FileTypeManager.js'
 import CooldownManager from '../Cooldown/CooldownManager.js'
 import Errors from '../Errors/Errors.js'

+ 2 - 2
services/web/app/src/Features/ThirdPartyDataStore/UpdateMerger.mjs

@@ -3,9 +3,9 @@ import _ from 'lodash'
 import fsPromises from 'node:fs/promises'
 import fs from 'node:fs'
 import logger from '@overleaf/logger'
-import EditorController from '../Editor/EditorController.js'
+import EditorController from '../Editor/EditorController.mjs'
 import FileTypeManager from '../Uploads/FileTypeManager.js'
-import ProjectEntityHandler from '../Project/ProjectEntityHandler.js'
+import ProjectEntityHandler from '../Project/ProjectEntityHandler.mjs'
 import crypto from 'node:crypto'
 import Settings from '@overleaf/settings'
 import { pipeline } from 'node:stream/promises'

+ 8 - 7
services/web/app/src/Features/TokenAccess/TokenAccessController.mjs

@@ -1,26 +1,27 @@
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import SessionManager from '../Authentication/SessionManager.js'
 import TokenAccessHandler from './TokenAccessHandler.js'
 import Errors from '../Errors/Errors.js'
 import logger from '@overleaf/logger'
 import OError from '@overleaf/o-error'
 import { expressify } from '@overleaf/promise-utils'
-import AuthorizationManager from '../Authorization/AuthorizationManager.js'
+import AuthorizationManager from '../Authorization/AuthorizationManager.mjs'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
 import ProjectAuditLogHandler from '../Project/ProjectAuditLogHandler.mjs'
 import CollaboratorsInviteHandler from '../Collaborators/CollaboratorsInviteHandler.mjs'
-import CollaboratorsHandler from '../Collaborators/CollaboratorsHandler.js'
+import CollaboratorsHandler from '../Collaborators/CollaboratorsHandler.mjs'
 import EditorRealTimeController from '../Editor/EditorRealTimeController.js'
-import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.js'
-import ProjectGetter from '../Project/ProjectGetter.js'
+import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.mjs'
+import ProjectGetter from '../Project/ProjectGetter.mjs'
 import AsyncFormHelper from '../Helpers/AsyncFormHelper.js'
 import AnalyticsManager from '../Analytics/AnalyticsManager.js'
-import { canRedirectToAdminDomain } from '../Helpers/AdminAuthorizationHelper.js'
+import AdminAuthorizationHelper from '../Helpers/AdminAuthorizationHelper.mjs'
 import { getSafeAdminDomainRedirect } from '../Helpers/UrlHelper.js'
 import UserGetter from '../User/UserGetter.js'
 import Settings from '@overleaf/settings'
-import LimitationsManager from '../Subscription/LimitationsManager.js'
+import LimitationsManager from '../Subscription/LimitationsManager.mjs'
 
+const { canRedirectToAdminDomain } = AdminAuthorizationHelper
 const orderedPrivilegeLevels = [
   PrivilegeLevels.NONE,
   PrivilegeLevels.READ_ONLY,

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

@@ -1,4 +1,4 @@
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import AuthorizationMiddleware from '../Authorization/AuthorizationMiddleware.mjs'
 import TokenAccessController from './TokenAccessController.mjs'
 

+ 4 - 4
services/web/app/src/Features/Uploads/ProjectUploadController.mjs

@@ -2,11 +2,11 @@ import logger from '@overleaf/logger'
 import metrics from '@overleaf/metrics'
 import fs from 'node:fs'
 import Path from 'node:path'
-import FileSystemImportManager from './FileSystemImportManager.js'
-import ProjectUploadManager from './ProjectUploadManager.js'
+import FileSystemImportManager from './FileSystemImportManager.mjs'
+import ProjectUploadManager from './ProjectUploadManager.mjs'
 import SessionManager from '../Authentication/SessionManager.js'
-import EditorController from '../Editor/EditorController.js'
-import ProjectLocator from '../Project/ProjectLocator.js'
+import EditorController from '../Editor/EditorController.mjs'
+import ProjectLocator from '../Project/ProjectLocator.mjs'
 import Settings from '@overleaf/settings'
 import { InvalidZipFileError } from './ArchiveErrors.js'
 import multer from 'multer'

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

@@ -1,5 +1,5 @@
 import AuthorizationMiddleware from '../Authorization/AuthorizationMiddleware.mjs'
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import ProjectUploadController from './ProjectUploadController.mjs'
 import { RateLimiter } from '../../infrastructure/RateLimiter.js'
 import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'

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

@@ -1,5 +1,5 @@
-import UserHandler from './UserHandler.js'
-import UserDeleter from './UserDeleter.js'
+import UserHandler from './UserHandler.mjs'
+import UserDeleter from './UserDeleter.mjs'
 import UserGetter from './UserGetter.js'
 import { User } from '../../models/User.js'
 import NewsletterManager from '../Newsletter/NewsletterManager.js'

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

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

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

@@ -1,4 +1,4 @@
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import Settings from '@overleaf/settings'
 import logger from '@overleaf/logger'
 import SessionManager from '../Authentication/SessionManager.js'

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

@@ -3,7 +3,7 @@ import OError from '@overleaf/o-error'
 import UserSessionsManager from './UserSessionsManager.js'
 import logger from '@overleaf/logger'
 import Settings from '@overleaf/settings'
-import AuthenticationController from '../Authentication/AuthenticationController.js'
+import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import SessionManager from '../Authentication/SessionManager.js'
 import NewsletterManager from '../Newsletter/NewsletterManager.js'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.js'

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

@@ -1,10 +1,9 @@
-import {
-  hasAdminCapability,
-  hasAdminAccess,
-} from '../Helpers/AdminAuthorizationHelper.js'
+import AdminAuthorizationHelper from '../Helpers/AdminAuthorizationHelper.mjs'
 import SessionManager from '../Authentication/SessionManager.js'
 import Settings from '@overleaf/settings'
 
+const { hasAdminCapability, hasAdminAccess } = AdminAuthorizationHelper
+
 const UserMembershipAuthorization = {
   hasStaffAccess(requiredStaffAccess) {
     return req => {

+ 6 - 7
services/web/app/src/infrastructure/ExpressLocals.mjs

@@ -12,18 +12,17 @@ import SessionManager from '../Features/Authentication/SessionManager.js'
 import PackageVersions from './PackageVersions.js'
 import Modules from './Modules.js'
 import Errors from '../Features/Errors/Errors.js'
+import AdminAuthorizationHelper from '../Features/Helpers/AdminAuthorizationHelper.mjs'
+import { addOptionalCleanupHandlerAfterDrainingConnections } from './GracefulShutdown.js'
+import { sanitizeSessionUserForFrontEnd } from './FrontEndUser.mjs'
+import { expressify } from '@overleaf/promise-utils'
 
-import {
+const {
   canRedirectToAdminDomain,
   hasAdminAccess,
   useAdminCapabilities,
   useHasAdminCapability,
-} from '../Features/Helpers/AdminAuthorizationHelper.js'
-
-import { addOptionalCleanupHandlerAfterDrainingConnections } from './GracefulShutdown.js'
-import { sanitizeSessionUserForFrontEnd } from './FrontEndUser.mjs'
-import { expressify } from '@overleaf/promise-utils'
-
+} = AdminAuthorizationHelper
 const IEEE_BRAND_ID = Settings.ieeeBrandId
 
 let webpackManifest

+ 3 - 2
services/web/app/src/infrastructure/Server.mjs

@@ -28,9 +28,9 @@ import Features from './Features.js'
 import ErrorController from '../Features/Errors/ErrorController.mjs'
 import HttpErrorHandler from '../Features/Errors/HttpErrorHandler.js'
 import UserSessionsManager from '../Features/User/UserSessionsManager.js'
-import AuthenticationController from '../Features/Authentication/AuthenticationController.js'
+import AuthenticationController from '../Features/Authentication/AuthenticationController.mjs'
 import SessionManager from '../Features/Authentication/SessionManager.js'
-import { hasAdminAccess } from '../Features/Helpers/AdminAuthorizationHelper.js'
+import AdminAuthorizationHelper from '../Features/Helpers/AdminAuthorizationHelper.mjs'
 import Modules from './Modules.js'
 import expressLocals from './ExpressLocals.mjs'
 import noCache from 'nocache'
@@ -39,6 +39,7 @@ import http from 'node:http'
 import { fileURLToPath } from 'node:url'
 import serveStaticWrapper from './ServeStaticWrapper.mjs'
 
+const { hasAdminAccess } = AdminAuthorizationHelper
 const sessionsRedisClient = UserSessionsRedis.client()
 
 const oneDayInMilliseconds = 86400000

+ 1 - 1
services/web/app/src/infrastructure/SiteAdminHandler.mjs

@@ -8,7 +8,7 @@ import {
 } from './GracefulShutdown.js'
 
 import Features from './Features.js'
-import UserHandler from '../Features/User/UserHandler.js'
+import UserHandler from '../Features/User/UserHandler.mjs'
 import metrics from '@overleaf/metrics'
 
 // Monitor a site maintenance file (e.g. /etc/site_status) periodically and

+ 1 - 1
services/web/app/src/router.mjs

@@ -12,7 +12,7 @@ import SubscriptionRouter from './Features/Subscription/SubscriptionRouter.mjs'
 import UploadsRouter from './Features/Uploads/UploadsRouter.mjs'
 import metrics from '@overleaf/metrics'
 import ReferalController from './Features/Referal/ReferalController.mjs'
-import AuthenticationController from './Features/Authentication/AuthenticationController.js'
+import AuthenticationController from './Features/Authentication/AuthenticationController.mjs'
 import PermissionsController from './Features/Authorization/PermissionsController.mjs'
 import SessionManager from './Features/Authentication/SessionManager.js'
 import TagsController from './Features/Tags/TagsController.mjs'

+ 5 - 4
services/web/modules/history-v1/test/acceptance/src/ProjectStructureTests.mjs

@@ -1,18 +1,19 @@
 import { expect } from 'chai'
 import mongodb from 'mongodb-legacy'
 import Path from 'node:path'
-import { fileURLToPath } from 'node:url'
 import fs from 'node:fs'
 import Settings from '@overleaf/settings'
 import _ from 'lodash'
-import ProjectGetter from '../../../../../app/src/Features/Project/ProjectGetter.js'
+import ProjectGetter from '../../../../../app/src/Features/Project/ProjectGetter.mjs'
 import User from '../../../../../test/acceptance/src/helpers/User.mjs'
 import MockDocUpdaterApiClass from '../../../../../test/acceptance/src/mocks/MockDocUpdaterApi.mjs'
 
 const { ObjectId } = mongodb
 
-const __dirname = fileURLToPath(new URL('.', import.meta.url))
-const FILES_PATH = Path.join(__dirname, '../../../../../test/acceptance/files')
+const FILES_PATH = Path.join(
+  import.meta.dirname,
+  '../../../../../test/acceptance/files'
+)
 
 let MockDocUpdaterApi
 

+ 5 - 6
services/web/modules/launchpad/app/src/LaunchpadController.mjs

@@ -2,18 +2,17 @@ import OError from '@overleaf/o-error'
 import { expressify } from '@overleaf/promise-utils'
 import Settings from '@overleaf/settings'
 import Path from 'node:path'
-import { fileURLToPath } from 'node:url'
 import logger from '@overleaf/logger'
 import UserRegistrationHandler from '../../../../app/src/Features/User/UserRegistrationHandler.mjs'
 import EmailHandler from '../../../../app/src/Features/Email/EmailHandler.js'
 import UserGetter from '../../../../app/src/Features/User/UserGetter.js'
 import { User } from '../../../../app/src/models/User.js'
 import AuthenticationManager from '../../../../app/src/Features/Authentication/AuthenticationManager.js'
-import AuthenticationController from '../../../../app/src/Features/Authentication/AuthenticationController.js'
+import AuthenticationController from '../../../../app/src/Features/Authentication/AuthenticationController.mjs'
 import SessionManager from '../../../../app/src/Features/Authentication/SessionManager.js'
-import { hasAdminAccess } from '../../../../app/src/Features/Helpers/AdminAuthorizationHelper.js'
+import AdminAuthorizationHelper from '../../../../app/src/Features/Helpers/AdminAuthorizationHelper.mjs'
 
-const __dirname = fileURLToPath(new URL('.', import.meta.url))
+const { hasAdminAccess } = AdminAuthorizationHelper
 
 /**
  * Container for functions that need to be mocked in tests
@@ -53,7 +52,7 @@ async function launchpadPage(req, res) {
 
   if (!sessionUser) {
     if (!adminUserExists) {
-      res.render(Path.resolve(__dirname, '../views/launchpad'), {
+      res.render(Path.resolve(import.meta.dirname, '../views/launchpad'), {
         adminUserExists,
         authMethod,
       })
@@ -66,7 +65,7 @@ async function launchpadPage(req, res) {
       isAdmin: 1,
     })
     if (hasAdminAccess(user)) {
-      res.render(Path.resolve(__dirname, '../views/launchpad'), {
+      res.render(Path.resolve(import.meta.dirname, '../views/launchpad'), {
         wsUrl: Settings.wsUrl,
         adminUserExists,
         authMethod,

+ 1 - 1
services/web/modules/launchpad/app/src/LaunchpadRouter.mjs

@@ -1,7 +1,7 @@
 import logger from '@overleaf/logger'
 
 import LaunchpadController from './LaunchpadController.mjs'
-import AuthenticationController from '../../../../app/src/Features/Authentication/AuthenticationController.js'
+import AuthenticationController from '../../../../app/src/Features/Authentication/AuthenticationController.mjs'
 import AuthorizationMiddleware from '../../../../app/src/Features/Authorization/AuthorizationMiddleware.mjs'
 
 export default {

+ 1 - 1
services/web/modules/launchpad/test/unit/src/LaunchpadController.test.mjs

@@ -57,7 +57,7 @@ describe('LaunchpadController', function () {
     }))
 
     vi.doMock(
-      '../../../../../app/src/Features/Authentication/AuthenticationController.js',
+      '../../../../../app/src/Features/Authentication/AuthenticationController.mjs',
       () => ({
         default: (ctx.AuthenticationController = {}),
       })

+ 1 - 1
services/web/modules/server-ce-scripts/scripts/delete-user.mjs

@@ -1,5 +1,5 @@
 import UserGetter from '../../../app/src/Features/User/UserGetter.js'
-import UserDeleter from '../../../app/src/Features/User/UserDeleter.js'
+import UserDeleter from '../../../app/src/Features/User/UserDeleter.mjs'
 import { fileURLToPath } from 'url'
 import minimist from 'minimist'
 

+ 1 - 1
services/web/modules/server-ce-scripts/scripts/export-user-projects.mjs

@@ -7,7 +7,7 @@ import {
   renameSync,
 } from 'fs'
 import { pipeline } from 'stream/promises'
-import DocumentUpdaterHandler from '../../../app/src/Features/DocumentUpdater/DocumentUpdaterHandler.js'
+import DocumentUpdaterHandler from '../../../app/src/Features/DocumentUpdater/DocumentUpdaterHandler.mjs'
 import ProjectZipStreamManager from '../../../app/src/Features/Downloads/ProjectZipStreamManager.mjs'
 import logger from '@overleaf/logger'
 import { promisify } from '@overleaf/promise-utils'

+ 1 - 1
services/web/modules/user-activate/app/src/UserActivateRouter.mjs

@@ -1,6 +1,6 @@
 import logger from '@overleaf/logger'
 import UserActivateController from './UserActivateController.mjs'
-import AuthenticationController from '../../../../app/src/Features/Authentication/AuthenticationController.js'
+import AuthenticationController from '../../../../app/src/Features/Authentication/AuthenticationController.mjs'
 import AuthorizationMiddleware from '../../../../app/src/Features/Authorization/AuthorizationMiddleware.mjs'
 
 export default {

+ 2 - 2
services/web/scripts/attach_dangling_comments_to_doc.mjs

@@ -3,9 +3,9 @@
 import minimist from 'minimist'
 import process from 'node:process'
 import ChatApiHandler from '../app/src/Features/Chat/ChatApiHandler.js'
-import DocumentUpdaterHandler from '../app/src/Features/DocumentUpdater/DocumentUpdaterHandler.js'
+import DocumentUpdaterHandler from '../app/src/Features/DocumentUpdater/DocumentUpdaterHandler.mjs'
 import DocstoreManager from '../app/src/Features/Docstore/DocstoreManager.js'
-import HistoryManager from '../app/src/Features/History/HistoryManager.js'
+import HistoryManager from '../app/src/Features/History/HistoryManager.mjs'
 import { db, ObjectId } from '../app/src/infrastructure/mongodb.js'
 
 const OPTS = parseArgs()

+ 4 - 4
services/web/scripts/check_project_files.mjs

@@ -1,11 +1,11 @@
 import { scriptRunner } from './lib/ScriptRunner.mjs'
 import Path from 'node:path'
 import DocstoreManager from '../app/src/Features/Docstore/DocstoreManager.js'
-import DocumentUpdaterHandler from '../app/src/Features/DocumentUpdater/DocumentUpdaterHandler.js'
-import ProjectGetter from '../app/src/Features/Project/ProjectGetter.js'
-import ProjectEntityMongoUpdateHandler from '../app/src/Features/Project/ProjectEntityMongoUpdateHandler.js'
+import DocumentUpdaterHandler from '../app/src/Features/DocumentUpdater/DocumentUpdaterHandler.mjs'
+import ProjectGetter from '../app/src/Features/Project/ProjectGetter.mjs'
+import ProjectEntityMongoUpdateHandler from '../app/src/Features/Project/ProjectEntityMongoUpdateHandler.mjs'
 import { waitForDb, db, ObjectId } from '../app/src/infrastructure/mongodb.js'
-import HistoryManager from '../app/src/Features/History/HistoryManager.js'
+import HistoryManager from '../app/src/Features/History/HistoryManager.mjs'
 import logger from '@overleaf/logger'
 import minimist from 'minimist'
 

+ 1 - 1
services/web/scripts/clear_project_tokens.mjs

@@ -1,4 +1,4 @@
-import ProjectDetailsHandler from '../app/src/Features/Project/ProjectDetailsHandler.js'
+import ProjectDetailsHandler from '../app/src/Features/Project/ProjectDetailsHandler.mjs'
 import { scriptRunner } from './lib/ScriptRunner.mjs'
 const projectId = process.argv[2]
 

+ 1 - 1
services/web/scripts/convert_doc_to_file.mjs

@@ -1,6 +1,6 @@
 import minimist from 'minimist'
 import { ObjectId } from '../app/src/infrastructure/mongodb.js'
-import ProjectEntityUpdateHandler from '../app/src/Features/Project/ProjectEntityUpdateHandler.js'
+import ProjectEntityUpdateHandler from '../app/src/Features/Project/ProjectEntityUpdateHandler.mjs'
 import Errors from '../app/src/Features/Errors/Errors.js'
 import { scriptRunner } from './lib/ScriptRunner.mjs'
 

+ 2 - 2
services/web/scripts/count_files_in_projects.mjs

@@ -1,6 +1,6 @@
 import readline from 'node:readline'
-import ProjectEntityHandler from '../app/src/Features/Project/ProjectEntityHandler.js'
-import ProjectGetter from '../app/src/Features/Project/ProjectGetter.js'
+import ProjectEntityHandler from '../app/src/Features/Project/ProjectEntityHandler.mjs'
+import ProjectGetter from '../app/src/Features/Project/ProjectGetter.mjs'
 import Errors from '../app/src/Features/Errors/Errors.js'
 
 async function countFiles() {

+ 3 - 3
services/web/scripts/count_project_size.mjs

@@ -1,9 +1,9 @@
 import readline from 'node:readline'
 import { ObjectId, db } from '../app/src/infrastructure/mongodb.js'
-import ProjectEntityHandler from '../app/src/Features/Project/ProjectEntityHandler.js'
-import ProjectGetter from '../app/src/Features/Project/ProjectGetter.js'
+import ProjectEntityHandler from '../app/src/Features/Project/ProjectEntityHandler.mjs'
+import ProjectGetter from '../app/src/Features/Project/ProjectGetter.mjs'
 import Errors from '../app/src/Features/Errors/Errors.js'
-import HistoryManager from '../app/src/Features/History/HistoryManager.js'
+import HistoryManager from '../app/src/Features/History/HistoryManager.mjs'
 
 // Handles a list of project IDs from stdin, one per line, and outputs the count of files and docs
 // in the project, along with the aggregated size in bytes for all files and docs.

+ 4 - 4
services/web/scripts/create_project.mjs

@@ -9,10 +9,10 @@ import _ from 'lodash'
 import parseArgs from 'minimist'
 import OError from '@overleaf/o-error'
 import { User } from '../app/src/models/User.js'
-import ProjectCreationHandler from '../app/src/Features/Project/ProjectCreationHandler.js'
-import ProjectEntityUpdateHandler from '../app/src/Features/Project/ProjectEntityUpdateHandler.js'
-import ProjectEntityHandler from '../app/src/Features/Project/ProjectEntityHandler.js'
-import EditorController from '../app/src/Features/Editor/EditorController.js'
+import ProjectCreationHandler from '../app/src/Features/Project/ProjectCreationHandler.mjs'
+import ProjectEntityUpdateHandler from '../app/src/Features/Project/ProjectEntityUpdateHandler.mjs'
+import ProjectEntityHandler from '../app/src/Features/Project/ProjectEntityHandler.mjs'
+import EditorController from '../app/src/Features/Editor/EditorController.mjs'
 import { fileURLToPath } from 'node:url'
 
 const __dirname = path.dirname(fileURLToPath(import.meta.url))

+ 2 - 2
services/web/scripts/delete_dangling_comments.mjs

@@ -2,9 +2,9 @@
 
 import minimist from 'minimist'
 import ChatApiHandler from '../app/src/Features/Chat/ChatApiHandler.js'
-import DocumentUpdaterHandler from '../app/src/Features/DocumentUpdater/DocumentUpdaterHandler.js'
+import DocumentUpdaterHandler from '../app/src/Features/DocumentUpdater/DocumentUpdaterHandler.mjs'
 import DocstoreManager from '../app/src/Features/Docstore/DocstoreManager.js'
-import HistoryManager from '../app/src/Features/History/HistoryManager.js'
+import HistoryManager from '../app/src/Features/History/HistoryManager.mjs'
 import { db, ObjectId } from '../app/src/infrastructure/mongodb.js'
 
 const OPTS = parseArgs()

+ 2 - 2
services/web/scripts/delete_dangling_file_refs.mjs

@@ -7,10 +7,10 @@ import minimist from 'minimist'
 import mongodb from 'mongodb-legacy'
 import { db } from '../app/src/infrastructure/mongodb.js'
 import Errors from '../app/src/Features/Errors/Errors.js'
-import ProjectEntityMongoUpdateHandler from '../app/src/Features/Project/ProjectEntityMongoUpdateHandler.js'
+import ProjectEntityMongoUpdateHandler from '../app/src/Features/Project/ProjectEntityMongoUpdateHandler.mjs'
 import { iterablePaths } from '../app/src/Features/Project/IterablePath.js'
 import { scriptRunner } from './lib/ScriptRunner.mjs'
-import HistoryManager from '../app/src/Features/History/HistoryManager.js'
+import HistoryManager from '../app/src/Features/History/HistoryManager.mjs'
 
 const { ObjectId } = mongodb
 

+ 1 - 1
services/web/scripts/delete_orphaned_doc_comment_ranges.mjs

@@ -1,7 +1,7 @@
 import minimist from 'minimist'
 import ChatApiHandler from '../app/src/Features/Chat/ChatApiHandler.js'
 import DocstoreManager from '../app/src/Features/Docstore/DocstoreManager.js'
-import DocumentUpdaterHandler from '../app/src/Features/DocumentUpdater/DocumentUpdaterHandler.js'
+import DocumentUpdaterHandler from '../app/src/Features/DocumentUpdater/DocumentUpdaterHandler.mjs'
 import { promiseMapWithLimit } from '@overleaf/promise-utils'
 import { scriptRunner } from './lib/ScriptRunner.mjs'
 

+ 2 - 2
services/web/scripts/e2e_test_setup.mjs

@@ -5,9 +5,9 @@ import { promiseMapWithLimit } from '@overleaf/promise-utils'
 import Settings from '@overleaf/settings'
 import { db } from '../app/src/infrastructure/mongodb.js'
 import GracefulShutdown from '../app/src/infrastructure/GracefulShutdown.js'
-import ProjectDeleter from '../app/src/Features/Project/ProjectDeleter.js'
+import ProjectDeleter from '../app/src/Features/Project/ProjectDeleter.mjs'
 import SplitTestManager from '../app/src/Features/SplitTests/SplitTestManager.js'
-import UserDeleter from '../app/src/Features/User/UserDeleter.js'
+import UserDeleter from '../app/src/Features/User/UserDeleter.mjs'
 import UserRegistrationHandler from '../app/src/Features/User/UserRegistrationHandler.mjs'
 
 const MONOREPO = Path.dirname(

+ 2 - 3
services/web/scripts/fix_malformed_filetree.mjs

@@ -8,9 +8,7 @@
  */
 import mongodb from 'mongodb-legacy'
 import { db } from '../app/src/infrastructure/mongodb.js'
-import ProjectLocator, {
-  findDeep,
-} from '../app/src/Features/Project/ProjectLocator.js'
+import ProjectLocator from '../app/src/Features/Project/ProjectLocator.mjs'
 import minimist from 'minimist'
 import readline from 'node:readline'
 import fs from 'node:fs'
@@ -18,6 +16,7 @@ import logger from '@overleaf/logger'
 import { scriptRunner } from './lib/ScriptRunner.mjs'
 
 const { ObjectId } = mongodb
+const { findDeep } = ProjectLocator
 const lastUpdated = new Date()
 
 const argv = minimist(process.argv.slice(2), {

+ 3 - 3
services/web/scripts/fix_oversized_docs.mjs

@@ -2,10 +2,10 @@ import fs from 'node:fs'
 import minimist from 'minimist'
 import { ObjectId } from '../app/src/infrastructure/mongodb.js'
 import DocstoreManager from '../app/src/Features/Docstore/DocstoreManager.js'
-import FileStoreHandler from '../app/src/Features/FileStore/FileStoreHandler.js'
+import FileStoreHandler from '../app/src/Features/FileStore/FileStoreHandler.mjs'
 import FileWriter from '../app/src/infrastructure/FileWriter.js'
-import ProjectEntityMongoUpdateHandler from '../app/src/Features/Project/ProjectEntityMongoUpdateHandler.js'
-import ProjectLocator from '../app/src/Features/Project/ProjectLocator.js'
+import ProjectEntityMongoUpdateHandler from '../app/src/Features/Project/ProjectEntityMongoUpdateHandler.mjs'
+import ProjectLocator from '../app/src/Features/Project/ProjectLocator.mjs'
 import RedisWrapper from '@overleaf/redis-wrapper'
 import Settings from '@overleaf/settings'
 import { scriptRunner } from './lib/ScriptRunner.mjs'

+ 1 - 1
services/web/scripts/force_doc_flush.mjs

@@ -1,6 +1,6 @@
 import mongodb from 'mongodb-legacy'
 import { db } from '../app/src/infrastructure/mongodb.js'
-import DocumentUpdaterHandler from '../app/src/Features/DocumentUpdater/DocumentUpdaterHandler.js'
+import DocumentUpdaterHandler from '../app/src/Features/DocumentUpdater/DocumentUpdaterHandler.mjs'
 import { scriptRunner } from './lib/ScriptRunner.mjs'
 
 const { ObjectId } = mongodb

+ 1 - 1
services/web/scripts/recover_docs_from_redis.mjs

@@ -3,7 +3,7 @@
 import minimist from 'minimist'
 
 import { db, ObjectId } from '../app/src/infrastructure/mongodb.js'
-import ProjectEntityUpdateHandler from '../app/src/Features/Project/ProjectEntityUpdateHandler.js'
+import ProjectEntityUpdateHandler from '../app/src/Features/Project/ProjectEntityUpdateHandler.mjs'
 import ProjectEntityRestoreHandler from '../app/src/Features/Project/ProjectEntityRestoreHandler.mjs'
 import RedisWrapper from '@overleaf/redis-wrapper'
 import Settings from '@overleaf/settings'

+ 1 - 1
services/web/scripts/restore_orphaned_docs.mjs

@@ -1,5 +1,5 @@
 import ProjectEntityRestoreHandler from '../app/src/Features/Project/ProjectEntityRestoreHandler.mjs'
-import ProjectEntityHandler from '../app/src/Features/Project/ProjectEntityHandler.js'
+import ProjectEntityHandler from '../app/src/Features/Project/ProjectEntityHandler.mjs'
 import DocstoreManager from '../app/src/Features/Docstore/DocstoreManager.js'
 import { scriptRunner } from './lib/ScriptRunner.mjs'
 

+ 1 - 1
services/web/scripts/soft_delete_project.mjs

@@ -1,5 +1,5 @@
 import minimist from 'minimist'
-import ProjectDeleter from '../app/src/Features/Project/ProjectDeleter.js'
+import ProjectDeleter from '../app/src/Features/Project/ProjectDeleter.mjs'
 import { scriptRunner } from './lib/ScriptRunner.mjs'
 
 async function main() {

+ 1 - 1
services/web/scripts/stress_test.mjs

@@ -1,6 +1,6 @@
 import minimist from 'minimist'
 import settings from '@overleaf/settings'
-import ProjectDetailsHandler from '../app/src/Features/Project/ProjectDetailsHandler.js'
+import ProjectDetailsHandler from '../app/src/Features/Project/ProjectDetailsHandler.mjs'
 import mongodb from '../app/src/infrastructure/mongodb.js'
 import mongoose from '../app/src/infrastructure/Mongoose.js'
 import fs from 'node:fs'

+ 1 - 1
services/web/scripts/undelete_project_to_user.mjs

@@ -1,5 +1,5 @@
 import minimist from 'minimist'
-import ProjectDeleter from '../app/src/Features/Project/ProjectDeleter.js'
+import ProjectDeleter from '../app/src/Features/Project/ProjectDeleter.mjs'
 import { scriptRunner } from './lib/ScriptRunner.mjs'
 
 async function main() {

+ 1 - 1
services/web/test/acceptance/src/HistoryTests.mjs

@@ -3,7 +3,7 @@ import Path from 'node:path'
 import { expect } from 'chai'
 import UserHelper from './helpers/User.mjs'
 import MockV1HistoryApiClass from './mocks/MockV1HistoryApi.mjs'
-import ProjectGetter from '../../../app/src/Features/Project/ProjectGetter.js'
+import ProjectGetter from '../../../app/src/Features/Project/ProjectGetter.mjs'
 import { fileURLToPath } from 'node:url'
 import sinon from 'sinon'
 import logger from '@overleaf/logger'

+ 3 - 3
services/web/test/acceptance/src/ProjectStructureMongoLockTest.mjs

@@ -14,9 +14,9 @@
 
 import LockManager from '../../../app/src/infrastructure/LockManager.js'
 
-import ProjectCreationHandler from '../../../app/src/Features/Project/ProjectCreationHandler.js'
-import ProjectGetter from '../../../app/src/Features/Project/ProjectGetter.js'
-import ProjectEntityMongoUpdateHandler from '../../../app/src/Features/Project/ProjectEntityMongoUpdateHandler.js'
+import ProjectCreationHandler from '../../../app/src/Features/Project/ProjectCreationHandler.mjs'
+import ProjectGetter from '../../../app/src/Features/Project/ProjectGetter.mjs'
+import ProjectEntityMongoUpdateHandler from '../../../app/src/Features/Project/ProjectEntityMongoUpdateHandler.mjs'
 import UserCreator from '../../../app/src/Features/User/UserCreator.mjs'
 import { expect } from 'chai'
 import _ from 'lodash'

+ 1 - 1
services/web/test/acceptance/src/ProjectStructureTests.mjs

@@ -3,7 +3,7 @@ import mongodb from 'mongodb-legacy'
 import Path from 'node:path'
 import fs from 'node:fs'
 import { Project } from '../../../app/src/models/Project.js'
-import ProjectGetter from '../../../app/src/Features/Project/ProjectGetter.js'
+import ProjectGetter from '../../../app/src/Features/Project/ProjectGetter.mjs'
 import UserHelper from './helpers/User.mjs'
 import MockDocStoreApiClass from './mocks/MockDocstoreApi.mjs'
 import MockDocUpdaterApiClass from './mocks/MockDocUpdaterApi.mjs'

+ 1 - 1
services/web/test/acceptance/src/SecurityHeadersTests.mjs

@@ -16,7 +16,7 @@ import { assert } from 'chai'
 import async from 'async'
 import User from './helpers/User.mjs'
 import request from './helpers/request.js'
-import ProjectGetter from '../../../app/src/Features/Project/ProjectGetter.js'
+import ProjectGetter from '../../../app/src/Features/Project/ProjectGetter.mjs'
 
 const assertHasCommonHeaders = function (response) {
   const { headers } = response

+ 1 - 1
services/web/test/acceptance/src/TpdsUpdateTests.mjs

@@ -1,5 +1,5 @@
 import { expect } from 'chai'
-import ProjectGetter from '../../../app/src/Features/Project/ProjectGetter.js'
+import ProjectGetter from '../../../app/src/Features/Project/ProjectGetter.mjs'
 import request from './helpers/request.js'
 import User from './helpers/User.mjs'
 

+ 4 - 4
services/web/test/unit/src/Collaborators/CollaboratorsController.test.mjs

@@ -88,14 +88,14 @@ describe('CollaboratorsController', function () {
     }))
 
     vi.doMock(
-      '../../../../app/src/Features/Collaborators/CollaboratorsHandler.js',
+      '../../../../app/src/Features/Collaborators/CollaboratorsHandler.mjs',
       () => ({
         default: ctx.CollaboratorsHandler,
       })
     )
 
     vi.doMock(
-      '../../../../app/src/Features/Collaborators/CollaboratorsGetter.js',
+      '../../../../app/src/Features/Collaborators/CollaboratorsGetter.mjs',
       () => ({
         default: ctx.CollaboratorsGetter,
       })
@@ -147,7 +147,7 @@ describe('CollaboratorsController', function () {
       })
     )
 
-    vi.doMock('../../../../app/src/Features/Project/ProjectGetter.js', () => ({
+    vi.doMock('../../../../app/src/Features/Project/ProjectGetter.mjs', () => ({
       default: ctx.ProjectGetter,
     }))
 
@@ -159,7 +159,7 @@ describe('CollaboratorsController', function () {
     )
 
     vi.doMock(
-      '../../../../app/src/Features/Subscription/LimitationsManager.js',
+      '../../../../app/src/Features/Subscription/LimitationsManager.mjs',
       () => ({
         default: ctx.LimitationsManager,
       })

+ 3 - 3
services/web/test/unit/src/Collaborators/CollaboratorsInviteController.test.mjs

@@ -125,7 +125,7 @@ describe('CollaboratorsInviteController', function () {
       },
     }
 
-    vi.doMock('../../../../app/src/Features/Project/ProjectGetter.js', () => ({
+    vi.doMock('../../../../app/src/Features/Project/ProjectGetter.mjs', () => ({
       default: ctx.ProjectGetter,
     }))
 
@@ -137,7 +137,7 @@ describe('CollaboratorsInviteController', function () {
     )
 
     vi.doMock(
-      '../../../../app/src/Features/Subscription/LimitationsManager.js',
+      '../../../../app/src/Features/Subscription/LimitationsManager.mjs',
       () => ({
         default: ctx.LimitationsManager,
       })
@@ -148,7 +148,7 @@ describe('CollaboratorsInviteController', function () {
     }))
 
     vi.doMock(
-      '../../../../app/src/Features/Collaborators/CollaboratorsGetter.js',
+      '../../../../app/src/Features/Collaborators/CollaboratorsGetter.mjs',
       () => ({
         default: ctx.CollaboratorsGetter,
       })

+ 3 - 3
services/web/test/unit/src/Collaborators/CollaboratorsInviteHandler.test.mjs

@@ -98,7 +98,7 @@ describe('CollaboratorsInviteHandler', function () {
     )
 
     vi.doMock(
-      '../../../../app/src/Features/Collaborators/CollaboratorsHandler.js',
+      '../../../../app/src/Features/Collaborators/CollaboratorsHandler.mjs',
       () => ({
         default: ctx.CollaboratorsHandler,
       })
@@ -108,7 +108,7 @@ describe('CollaboratorsInviteHandler', function () {
       default: ctx.UserGetter,
     }))
 
-    vi.doMock('../../../../app/src/Features/Project/ProjectGetter.js', () => ({
+    vi.doMock('../../../../app/src/Features/Project/ProjectGetter.mjs', () => ({
       default: ctx.ProjectGetter,
     }))
 
@@ -141,7 +141,7 @@ describe('CollaboratorsInviteHandler', function () {
     )
 
     vi.doMock(
-      '../../../../app/src/Features/Subscription/LimitationsManager.js',
+      '../../../../app/src/Features/Subscription/LimitationsManager.mjs',
       () => ({
         default: ctx.LimitationsManager,
       })

Някои файлове не бяха показани, защото твърде много файлове са промени