Merge pull request #29928 from overleaf/ar-last-infrastructure-conversions

[web] last infrastructure conversions

GitOrigin-RevId: ad1aff9b7df0610ed0303157d9e2c8032f32c02b
This commit is contained in:
Andrew Rumble
2025-11-27 11:49:21 +00:00
committed by Copybot
parent 43c263b419
commit 07c827e9fd
283 changed files with 975 additions and 931 deletions

View File

@@ -1,7 +1,7 @@
// Metrics must be initialized before importing anything else
import { metricsModuleImportStartTime } from '@overleaf/metrics/initialize.js'
import Modules from './app/src/infrastructure/Modules.js'
import Modules from './app/src/infrastructure/Modules.mjs'
import metrics from '@overleaf/metrics'
import Settings from '@overleaf/settings'
import logger from '@overleaf/logger'
@@ -13,10 +13,10 @@ import https from 'node:https'
import Serializers from './app/src/infrastructure/LoggerSerializers.mjs'
import Server from './app/src/infrastructure/Server.mjs'
import QueueWorkers from './app/src/infrastructure/QueueWorkers.mjs'
import mongodb from './app/src/infrastructure/mongodb.js'
import mongoose from './app/src/infrastructure/Mongoose.js'
import { triggerGracefulShutdown } from './app/src/infrastructure/GracefulShutdown.js'
import FileWriter from './app/src/infrastructure/FileWriter.js'
import mongodb from './app/src/infrastructure/mongodb.mjs'
import mongoose from './app/src/infrastructure/Mongoose.mjs'
import { triggerGracefulShutdown } from './app/src/infrastructure/GracefulShutdown.mjs'
import FileWriter from './app/src/infrastructure/FileWriter.mjs'
import { fileURLToPath } from 'node:url'
metrics.gauge(

View File

@@ -1,7 +1,7 @@
import SessionManager from '../Authentication/SessionManager.mjs'
import UserAnalyticsIdCache from './UserAnalyticsIdCache.mjs'
import Settings from '@overleaf/settings'
import Metrics from '../../infrastructure/Metrics.js'
import Metrics from '../../infrastructure/Metrics.mjs'
import Queues from '../../infrastructure/Queues.mjs'
import crypto, { createHash } from 'node:crypto'
import _ from 'lodash'

View File

@@ -1,7 +1,7 @@
import AuthenticationController from './../Authentication/AuthenticationController.mjs'
import AnalyticsController from './AnalyticsController.mjs'
import AnalyticsProxy from './AnalyticsProxy.mjs'
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'
const rateLimiters = {

View File

@@ -19,9 +19,9 @@ import AsyncFormHelper from '../Helpers/AsyncFormHelper.mjs'
import _ from 'lodash'
import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
import AnalyticsRegistrationSourceHelper from '../Analytics/AnalyticsRegistrationSourceHelper.mjs'
import { acceptsJson } from '../../infrastructure/RequestContentTypeDetection.js'
import { acceptsJson } from '../../infrastructure/RequestContentTypeDetection.mjs'
import AdminAuthorizationHelper from '../Helpers/AdminAuthorizationHelper.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import { expressify, promisify } from '@overleaf/promise-utils'
import { handleAuthenticateErrors } from './AuthenticationErrors.mjs'
import EmailHelper from '../Helpers/EmailHelper.mjs'

View File

@@ -1,6 +1,6 @@
import Settings from '@overleaf/settings'
import { User } from '../../models/User.mjs'
import { db, ObjectId } from '../../infrastructure/mongodb.js'
import { db, ObjectId } from '../../infrastructure/mongodb.mjs'
import bcrypt from 'bcrypt'
import EmailHelper from '../Helpers/EmailHelper.mjs'

View File

@@ -1,7 +1,7 @@
// @ts-check
import { ForbiddenError, UserNotFoundError } from '../Errors/Errors.js'
import PermissionsManager from './PermissionsManager.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import { expressify } from '@overleaf/promise-utils'
import Features from '../../infrastructure/Features.mjs'

View File

@@ -44,7 +44,7 @@
import { callbackify } from 'node:util'
import Errors from '../Errors/Errors.js'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
const { ForbiddenError } = Errors

View File

@@ -1,5 +1,5 @@
import { expressify } from '@overleaf/promise-utils'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import ChatApiHandler from './ChatApiHandler.mjs'
import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
import SessionManager from '../Authentication/SessionManager.mjs'

View File

@@ -15,7 +15,7 @@ import TokenAccessHandler from '../TokenAccess/TokenAccessHandler.mjs'
import ProjectAuditLogHandler from '../Project/ProjectAuditLogHandler.mjs'
import LimitationsManager from '../Subscription/LimitationsManager.mjs'
import PrivilegeLevels from '../Authorization/PrivilegeLevels.mjs'
import { z, zz, validateReq } from '../../infrastructure/Validation.js'
import { z, zz, validateReq } from '../../infrastructure/Validation.mjs'
import Features from '../../infrastructure/Features.mjs'
const { hasAdminAccess } = AdminAuthorizationHelper

View File

@@ -10,8 +10,8 @@ import EmailHelper from '../Helpers/EmailHelper.mjs'
import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'
import SessionManager from '../Authentication/SessionManager.mjs'
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import { z, zz, validateReq } from '../../infrastructure/Validation.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import { z, zz, validateReq } from '../../infrastructure/Validation.mjs'
import { expressify } from '@overleaf/promise-utils'
import ProjectAuditLogHandler from '../Project/ProjectAuditLogHandler.mjs'
import Errors from '../Errors/Errors.js'

View File

@@ -2,7 +2,7 @@ import CollaboratorsController from './CollaboratorsController.mjs'
import AuthenticationController from '../Authentication/AuthenticationController.mjs'
import AuthorizationMiddleware from '../Authorization/AuthorizationMiddleware.mjs'
import CollaboratorsInviteController from './CollaboratorsInviteController.mjs'
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'
import CaptchaMiddleware from '../Captcha/CaptchaMiddleware.mjs'
import AnalyticsRegistrationSourceMiddleware from '../Analytics/AnalyticsRegistrationSourceMiddleware.mjs'

View File

@@ -6,7 +6,7 @@ import {
fetchStringWithResponse,
RequestFailedError,
} from '@overleaf/fetch-utils'
import RedisWrapper from '../../infrastructure/RedisWrapper.js'
import RedisWrapper from '../../infrastructure/RedisWrapper.mjs'
import Cookie from 'cookie'
import logger from '@overleaf/logger'
import Metrics from '@overleaf/metrics'

View File

@@ -10,8 +10,8 @@ import logger from '@overleaf/logger'
import Settings from '@overleaf/settings'
import Errors from '../Errors/Errors.js'
import SessionManager from '../Authentication/SessionManager.mjs'
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import Validation from '../../infrastructure/Validation.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import Validation from '../../infrastructure/Validation.mjs'
import ClsiCookieManagerFactory from './ClsiCookieManager.mjs'
import Path from 'node:path'
import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'

View File

@@ -1,12 +1,12 @@
import Crypto from 'node:crypto'
import Settings from '@overleaf/settings'
import RedisWrapper from '../../infrastructure/RedisWrapper.js'
import RedisWrapper from '../../infrastructure/RedisWrapper.mjs'
import ProjectGetter from '../Project/ProjectGetter.mjs'
import ProjectRootDocManager from '../Project/ProjectRootDocManager.mjs'
import UserGetter from '../User/UserGetter.mjs'
import ClsiManager from './ClsiManager.mjs'
import Metrics from '@overleaf/metrics'
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import UserAnalyticsIdCache from '../Analytics/UserAnalyticsIdCache.mjs'
import { callbackify, callbackifyMultiResult } from '@overleaf/promise-utils'
let CompileManager

View File

@@ -1,7 +1,7 @@
import SessionManager from '../Authentication/SessionManager.mjs'
import ContactManager from './ContactManager.mjs'
import UserGetter from '../User/UserGetter.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import { expressify } from '@overleaf/promise-utils'
function _formatContact(contact) {

View File

@@ -1,4 +1,4 @@
import RedisWrapper from '../../infrastructure/RedisWrapper.js'
import RedisWrapper from '../../infrastructure/RedisWrapper.mjs'
import logger from '@overleaf/logger'
import { promisify } from '@overleaf/promise-utils'
const rclient = RedisWrapper.client('cooldown')

View File

@@ -1,7 +1,7 @@
import logger from '@overleaf/logger'
import DocumentUpdaterHandler from './DocumentUpdaterHandler.mjs'
import ProjectLocator from '../Project/ProjectLocator.mjs'
import { plainTextResponse } from '../../infrastructure/Response.js'
import { plainTextResponse } from '../../infrastructure/Response.mjs'
import { expressify } from '@overleaf/promise-utils'
async function getDoc(req, res) {

View File

@@ -10,7 +10,7 @@ import _ from 'lodash'
import logger from '@overleaf/logger'
import { callbackifyAll } from '@overleaf/promise-utils'
import ProjectGetter from '../Project/ProjectGetter.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
const REQUEST_TIMEOUT_MS = 30 * 1000
const RESYNC_TIMEOUT_MS = 6 * 60 * 1000

View File

@@ -5,9 +5,9 @@ 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'
import { plainTextResponse } from '../../infrastructure/Response.mjs'
import { expressify } from '@overleaf/promise-utils'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
async function getDocument(req, res) {
const { Project_id: projectId, doc_id: docId } = req.params

View File

@@ -14,7 +14,7 @@ import Metrics from '@overleaf/metrics'
import ProjectGetter from '../Project/ProjectGetter.mjs'
import ProjectZipStreamManager from './ProjectZipStreamManager.mjs'
import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
import { prepareZipAttachment } from '../../infrastructure/Response.js'
import { prepareZipAttachment } from '../../infrastructure/Response.mjs'
let ProjectDownloadsController

View File

@@ -11,7 +11,7 @@ import Errors from '../Errors/Errors.js'
import { expressify } from '@overleaf/promise-utils'
import Settings from '@overleaf/settings'
import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.mjs'
import { z, zz, validateReq } from '../../infrastructure/Validation.js'
import { z, zz, validateReq } from '../../infrastructure/Validation.mjs'
const ProjectAccess = CollaboratorsGetter.ProjectAccess

View File

@@ -12,7 +12,7 @@
*/
import Settings from '@overleaf/settings'
import Metrics from '@overleaf/metrics'
import RedisWrapper from '../../infrastructure/RedisWrapper.js'
import RedisWrapper from '../../infrastructure/RedisWrapper.mjs'
import os from 'node:os'
import crypto from 'node:crypto'
let EditorRealTimeController

View File

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

View File

@@ -5,7 +5,7 @@ import Settings from '@overleaf/settings'
import nodemailer from 'nodemailer'
import aws from '@aws-sdk/client-ses'
import OError from '@overleaf/o-error'
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import _ from 'lodash'
const EMAIL_SETTINGS = Settings.email || {}

View File

@@ -3,7 +3,7 @@ import Errors from './Errors.js'
import SessionManager from '../Authentication/SessionManager.mjs'
import SamlLogHandler from '../SamlLog/SamlLogHandler.mjs'
import HttpErrorHandler from './HttpErrorHandler.mjs'
import { plainTextResponse } from '../../infrastructure/Response.js'
import { plainTextResponse } from '../../infrastructure/Response.mjs'
import { expressifyErrorHandler } from '@overleaf/promise-utils'
function notFound(req, res) {

View File

@@ -1,6 +1,6 @@
import logger from '@overleaf/logger'
import Settings from '@overleaf/settings'
import { plainTextResponse } from '../../infrastructure/Response.js'
import { plainTextResponse } from '../../infrastructure/Response.mjs'
function renderJSONError(res, message, info = {}) {
if (info.message) {

View File

@@ -7,7 +7,7 @@ import Metrics from '@overleaf/metrics'
import ProjectLocator from '../Project/ProjectLocator.mjs'
import HistoryManager from '../History/HistoryManager.mjs'
import Errors from '../Errors/Errors.js'
import { preparePlainTextResponse } from '../../infrastructure/Response.js'
import { preparePlainTextResponse } from '../../infrastructure/Response.mjs'
async function getFile(req, res) {
const projectId = req.params.Project_id

View File

@@ -7,7 +7,7 @@ import ProjectDetailsHandler from '../Project/ProjectDetailsHandler.mjs'
import { File } from '../../models/File.mjs'
import OError from '@overleaf/o-error'
import { promisifyAll } from '@overleaf/promise-utils'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
const FileStoreHandler = {
RETRY_ATTEMPTS: 3,

View File

@@ -1,4 +1,4 @@
import RedisWrapper from '../../infrastructure/RedisWrapper.js'
import RedisWrapper from '../../infrastructure/RedisWrapper.mjs'
import settings from '@overleaf/settings'
import logger from '@overleaf/logger'
import UserGetter from '../User/UserGetter.mjs'

View File

@@ -1,5 +1,5 @@
import Settings from '@overleaf/settings'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import { expressify } from '@overleaf/promise-utils'
import SessionManager from '../Authentication/SessionManager.mjs'
import logger from '@overleaf/logger'

View File

@@ -1,4 +1,4 @@
import { acceptsJson } from '../../infrastructure/RequestContentTypeDetection.js'
import { acceptsJson } from '../../infrastructure/RequestContentTypeDetection.mjs'
export default {
redirect,

View File

@@ -23,9 +23,9 @@ 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 { prepareZipAttachment } from '../../infrastructure/Response.mjs'
import Features from '../../infrastructure/Features.mjs'
import { z, zz, validateReq } from '../../infrastructure/Validation.js'
import { z, zz, validateReq } from '../../infrastructure/Validation.mjs'
// Number of seconds after which the browser should send a request to revalidate
// blobs

View File

@@ -11,7 +11,7 @@ import OError from '@overleaf/o-error'
import UserGetter from '../User/UserGetter.mjs'
import ProjectGetter from '../Project/ProjectGetter.mjs'
import HistoryBackupDeletionHandler from './HistoryBackupDeletionHandler.mjs'
import { db, waitForDb } from '../../infrastructure/mongodb.js'
import { db, waitForDb } from '../../infrastructure/mongodb.mjs'
import Metrics from '@overleaf/metrics'
import { NotFoundError } from '../Errors/Errors.js'

View File

@@ -7,7 +7,7 @@ import HistoryManager from '../History/HistoryManager.mjs'
import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
import DocstoreManager from '../Docstore/DocstoreManager.mjs'
import ProjectOptionsHandler from '../Project/ProjectOptionsHandler.mjs'
import mongodb from '../../infrastructure/mongodb.js'
import mongodb from '../../infrastructure/mongodb.mjs'
const { db, ObjectId, READ_PREFERENCE_SECONDARY } = mongodb

View File

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

View File

@@ -1,7 +1,7 @@
import Settings from '@overleaf/settings'
import Path from 'node:path'
import FileWriter from '../../infrastructure/FileWriter.js'
import Metrics from '../../infrastructure/Metrics.js'
import FileWriter from '../../infrastructure/FileWriter.mjs'
import Metrics from '../../infrastructure/Metrics.mjs'
import FileSystemImportManager from '../Uploads/FileSystemImportManager.mjs'
import FileTypeManager from '../Uploads/FileTypeManager.mjs'
import EditorController from '../Editor/EditorController.mjs'

View File

@@ -5,8 +5,8 @@ import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mj
import ProjectGetter from '../Project/ProjectGetter.mjs'
import ProjectUpdateHandler from '../Project/ProjectUpdateHandler.mjs'
import { Project } from '../../models/Project.mjs'
import Modules from '../../infrastructure/Modules.js'
import { READ_PREFERENCE_SECONDARY } from '../../infrastructure/mongodb.js'
import Modules from '../../infrastructure/Modules.mjs'
import { READ_PREFERENCE_SECONDARY } from '../../infrastructure/mongodb.mjs'
import { callbackifyAll } from '@overleaf/promise-utils'
import Metrics from '@overleaf/metrics'

View File

@@ -10,7 +10,7 @@ import {
InvalidInstitutionalEmailError,
} from '../Errors/Errors.js'
import { fetchJson, fetchNothing } from '@overleaf/fetch-utils'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
function _makeRequestOptions(options) {
const requestOptions = {

View File

@@ -20,9 +20,9 @@ import {
OutputFileFetchFailedError,
FileTooLargeError,
} from '../Errors/Errors.js'
import Modules from '../../infrastructure/Modules.js'
import { plainTextResponse } from '../../infrastructure/Response.js'
import { z, zz, validateReq } from '../../infrastructure/Validation.js'
import Modules from '../../infrastructure/Modules.mjs'
import { plainTextResponse } from '../../infrastructure/Response.mjs'
import { z, zz, validateReq } from '../../infrastructure/Validation.mjs'
import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
import { expressify } from '@overleaf/promise-utils'
import ProjectOutputFileAgent from './ProjectOutputFileAgent.mjs'

View File

@@ -1,4 +1,4 @@
import FileWriter from '../../infrastructure/FileWriter.js'
import FileWriter from '../../infrastructure/FileWriter.mjs'
import EditorController from '../Editor/EditorController.mjs'
import ProjectLocator from '../Project/ProjectLocator.mjs'
import { Project } from '../../models/Project.mjs'

View File

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

View File

@@ -8,7 +8,7 @@ import UserSessionsManager from '../User/UserSessionsManager.mjs'
import OError from '@overleaf/o-error'
import EmailsHelper from '../Helpers/EmailHelper.mjs'
import { expressify } from '@overleaf/promise-utils'
import { z, validateReq } from '../../infrastructure/Validation.js'
import { z, validateReq } from '../../infrastructure/Validation.mjs'
const setNewUserPasswordSchema = z.object({
body: z.object({

View File

@@ -1,7 +1,7 @@
import PasswordResetController from './PasswordResetController.mjs'
import AuthenticationController from '../Authentication/AuthenticationController.mjs'
import CaptchaMiddleware from '../../Features/Captcha/CaptchaMiddleware.mjs'
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'
const rateLimiter = new RateLimiter('password_reset_rate_limit', {

View File

@@ -44,8 +44,8 @@ import PublicAccessLevels from '../Authorization/PublicAccessLevels.mjs'
import TagsHandler from '../Tags/TagsHandler.mjs'
import TutorialHandler from '../Tutorial/TutorialHandler.mjs'
import UserUpdater from '../User/UserUpdater.mjs'
import Modules from '../../infrastructure/Modules.js'
import { z, zz, validateReq } from '../../infrastructure/Validation.js'
import Modules from '../../infrastructure/Modules.mjs'
import { z, zz, validateReq } from '../../infrastructure/Validation.mjs'
import UserGetter from '../User/UserGetter.mjs'
import { isStandaloneAiAddOnPlanCode } from '../Subscription/AiHelper.mjs'
import SubscriptionController from '../Subscription/SubscriptionController.mjs'

View File

@@ -3,8 +3,8 @@ import {
db,
ObjectId,
READ_PREFERENCE_SECONDARY,
} from '../../infrastructure/mongodb.js'
import Modules from '../../infrastructure/Modules.js'
} from '../../infrastructure/mongodb.mjs'
import Modules from '../../infrastructure/Modules.mjs'
import { callbackify } from 'node:util'
import { Project } from '../../models/Project.mjs'
import { DeletedProject } from '../../models/DeletedProject.mjs'

View File

@@ -20,7 +20,7 @@ import TpdsProjectFlusher from '../ThirdPartyDataStore/TpdsProjectFlusher.mjs'
import _ from 'lodash'
import TagsHandler from '../Tags/TagsHandler.mjs'
import ClsiCacheManager from '../Compile/ClsiCacheManager.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
export default {
duplicate: callbackify(duplicate),

View File

@@ -8,7 +8,7 @@ import OError from '@overleaf/o-error'
import CooldownManager from '../Cooldown/CooldownManager.mjs'
import Errors from '../Errors/Errors.js'
import { Folder } from '../../models/Folder.mjs'
import LockManager from '../../infrastructure/LockManager.js'
import LockManager from '../../infrastructure/LockManager.mjs'
import { Project } from '../../models/Project.mjs'
import ProjectEntityHandler from './ProjectEntityHandler.mjs'
import ProjectGetter from './ProjectGetter.mjs'

View File

@@ -9,7 +9,7 @@ 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 LockManager from '../../infrastructure/LockManager.mjs'
import { Project } from '../../models/Project.mjs'
import ProjectEntityHandler from './ProjectEntityHandler.mjs'
import ProjectGetter from './ProjectGetter.mjs'
@@ -19,7 +19,7 @@ import ProjectUpdateHandler from './ProjectUpdateHandler.mjs'
import ProjectEntityMongoUpdateHandler from './ProjectEntityMongoUpdateHandler.mjs'
import SafePath from './SafePath.mjs'
import TpdsUpdateSender from '../ThirdPartyDataStore/TpdsUpdateSender.mjs'
import FileWriter from '../../infrastructure/FileWriter.js'
import FileWriter from '../../infrastructure/FileWriter.mjs'
import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
import { callbackifyMultiResult, callbackify } from '@overleaf/promise-utils'
import { iterablePaths } from './IterablePath.mjs'

View File

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

View File

@@ -17,7 +17,7 @@ import logger from '@overleaf/logger'
import Features from '../../infrastructure/Features.mjs'
import SubscriptionViewModelBuilder from '../Subscription/SubscriptionViewModelBuilder.mjs'
import NotificationsHandler from '../Notifications/NotificationsHandler.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import { OError, V1ConnectionError } from '../Errors/Errors.js'
import { User } from '../../models/User.mjs'
import UserPrimaryEmailCheckHandler from '../User/UserPrimaryEmailCheckHandler.mjs'

View File

@@ -1,7 +1,7 @@
import { Project } from '../../models/Project.mjs'
import settings from '@overleaf/settings'
import { callbackify } from 'node:util'
import { db, ObjectId } from '../../infrastructure/mongodb.js'
import { db, ObjectId } from '../../infrastructure/mongodb.mjs'
import Errors from '../Errors/Errors.js'
import mongodb from 'mongodb-legacy'
const safeCompilers = ['xelatex', 'pdflatex', 'latex', 'lualatex']

View File

@@ -23,7 +23,7 @@ import globby from 'globby'
import _ from 'lodash'
import { promisifyAll } from '@overleaf/promise-utils'
import logger from '@overleaf/logger'
import { BackgroundTaskTracker } from '../../infrastructure/GracefulShutdown.js'
import { BackgroundTaskTracker } from '../../infrastructure/GracefulShutdown.mjs'
const rootDocResets = new BackgroundTaskTracker('root doc resets')
const ProjectRootDocManager = {

View File

@@ -1,4 +1,4 @@
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import { callbackify } from '@overleaf/promise-utils'
import Settings from '@overleaf/settings'

View File

@@ -1,5 +1,5 @@
import crypto from 'node:crypto'
import { db } from '../../infrastructure/mongodb.js'
import { db } from '../../infrastructure/mongodb.mjs'
import Errors from '../Errors/Errors.js'
import { callbackify } from 'node:util'

View File

@@ -6,7 +6,7 @@ import TpdsUpdateSender from '../ThirdPartyDataStore/TpdsUpdateSender.mjs'
import TpdsProjectFlusher from '../ThirdPartyDataStore/TpdsProjectFlusher.mjs'
import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
import SystemMessageManager from '../SystemMessages/SystemMessageManager.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
const AdminController = {
_sendDisconnectAllUsersMessage: delay => {

View File

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

View File

@@ -2,7 +2,7 @@
import SessionManager from '../Authentication/SessionManager.mjs'
import LearnedWordsManager from './LearnedWordsManager.mjs'
import { z, validateReq } from '../../infrastructure/Validation.js'
import { z, validateReq } from '../../infrastructure/Validation.mjs'
const learnSchema = z.object({
body: z.object({

View File

@@ -14,7 +14,7 @@ import InstitutionsFeatures from '../Institutions/InstitutionsFeatures.mjs'
import UserGetter from '../User/UserGetter.mjs'
import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'
import Queues from '../../infrastructure/Queues.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import { AI_ADD_ON_CODE } from './AiHelper.mjs'
// import { fetchNothing } from '@overleaf/fetch-utils'
import metrics from '@overleaf/metrics'

View File

@@ -19,7 +19,7 @@ import OError from '@overleaf/o-error'
import Errors from './Errors.mjs'
import SplitTestHandler from '../SplitTests/SplitTestHandler.mjs'
import AuthorizationManager from '../Authorization/AuthorizationManager.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import async from 'async'
import HttpErrorHandler from '../Errors/HttpErrorHandler.mjs'
import RecurlyClient from './RecurlyClient.mjs'
@@ -32,7 +32,7 @@ import { User } from '../../models/User.mjs'
import UserGetter from '../User/UserGetter.mjs'
import PermissionsManager from '../Authorization/PermissionsManager.mjs'
import { sanitizeSessionUserForFrontEnd } from '../../infrastructure/FrontEndUser.mjs'
import { z, validateReq } from '../../infrastructure/Validation.js'
import { z, validateReq } from '../../infrastructure/Validation.mjs'
import { IndeterminateInvoiceError } from '../Errors/Errors.js'
import SubscriptionLocator from './SubscriptionLocator.mjs'

View File

@@ -6,10 +6,10 @@ import SubscriptionLocator from './SubscriptionLocator.mjs'
import SessionManager from '../Authentication/SessionManager.mjs'
import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
import { expressify } from '@overleaf/promise-utils'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import UserGetter from '../User/UserGetter.mjs'
import { Subscription } from '../../models/Subscription.mjs'
import { z, validateReq } from '../../infrastructure/Validation.js'
import { z, validateReq } from '../../infrastructure/Validation.mjs'
import { isProfessionalGroupPlan } from './PlansHelper.mjs'
import {
MissingBillingInfoError,

View File

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

View File

@@ -13,7 +13,7 @@ import EmailHandler from '../Email/EmailHandler.mjs'
import { callbackify } from '@overleaf/promise-utils'
import UserUpdater from '../User/UserUpdater.mjs'
import { IndeterminateInvoiceError } from '../Errors/Errors.js'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import SplitTestHandler from '../SplitTests/SplitTestHandler.mjs'
import { AI_ADD_ON_CODE } from './AiHelper.mjs'

View File

@@ -3,7 +3,7 @@ import PermissionsController from '../Authorization/PermissionsController.mjs'
import SubscriptionController from './SubscriptionController.mjs'
import SubscriptionGroupController from './SubscriptionGroupController.mjs'
import TeamInvitesController from './TeamInvitesController.mjs'
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'
import Settings from '@overleaf/settings'

View File

@@ -1,4 +1,4 @@
import { db, ObjectId } from '../../infrastructure/mongodb.js'
import { db, ObjectId } from '../../infrastructure/mongodb.mjs'
import { callbackify } from '@overleaf/promise-utils'
import { Subscription } from '../../models/Subscription.mjs'
import SubscriptionLocator from './SubscriptionLocator.mjs'
@@ -13,8 +13,8 @@ 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 mongoose from '../../infrastructure/Mongoose.js'
import Modules from '../../infrastructure/Modules.js'
import mongoose from '../../infrastructure/Mongoose.mjs'
import Modules from '../../infrastructure/Modules.mjs'
/**
* @typedef {import('../../../../types/subscription/dashboard/subscription').Subscription} Subscription

View File

@@ -17,7 +17,7 @@ import { callbackify } from '@overleaf/promise-utils'
import { V1ConnectionError } from '../Errors/Errors.js'
import FeaturesHelper from './FeaturesHelper.mjs'
import { formatCurrency } from '../../util/currency.js'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import SplitTestHandler from '../SplitTests/SplitTestHandler.mjs'
const { MEMBERS_LIMIT_ADD_ON_CODE } = PaymentProviderEntities

View File

@@ -12,8 +12,8 @@ import { expressify } from '@overleaf/promise-utils'
import HttpErrorHandler from '../Errors/HttpErrorHandler.mjs'
import PermissionsManager from '../Authorization/PermissionsManager.mjs'
import EmailHandler from '../Email/EmailHandler.mjs'
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import Modules from '../../infrastructure/Modules.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import Modules from '../../infrastructure/Modules.mjs'
import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
import { sanitizeSessionUserForFrontEnd } from '../../infrastructure/FrontEndUser.mjs'

View File

@@ -1,7 +1,7 @@
import logger from '@overleaf/logger'
import crypto from 'node:crypto'
import settings from '@overleaf/settings'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import mongodb from 'mongodb-legacy'
import { Subscription } from '../../models/Subscription.mjs'
import { SSOConfig } from '../../models/SSOConfig.mjs'

View File

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

View File

@@ -1,7 +1,7 @@
import TagsHandler from './TagsHandler.mjs'
import SessionManager from '../Authentication/SessionManager.mjs'
import Errors from '../Errors/Errors.js'
import { z, validateReq } from '../../infrastructure/Validation.js'
import { z, validateReq } from '../../infrastructure/Validation.mjs'
import { expressify } from '@overleaf/promise-utils'
async function _getTags(userId, _req, res) {

View File

@@ -1,7 +1,7 @@
import AuthenticationController from '../Authentication/AuthenticationController.mjs'
import TemplatesController from './TemplatesController.mjs'
import TemplatesMiddleware from './TemplatesMiddleware.mjs'
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'
import AnalyticsRegistrationSourceMiddleware from '../Analytics/AnalyticsRegistrationSourceMiddleware.mjs'

View File

@@ -10,7 +10,7 @@ import ProjectRootDocManager from '../Project/ProjectRootDocManager.mjs'
import FileTypeManager from '../Uploads/FileTypeManager.mjs'
import CooldownManager from '../Cooldown/CooldownManager.mjs'
import Errors from '../Errors/Errors.js'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
async function newUpdate(
userId,

View File

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

View File

@@ -8,7 +8,7 @@ import metrics from '@overleaf/metrics'
import AuthenticationManager from '../Authentication/AuthenticationManager.mjs'
import SessionManager from '../Authentication/SessionManager.mjs'
import Features from '../../infrastructure/Features.mjs'
import { z, validateReq } from '../../infrastructure/Validation.js'
import { z, validateReq } from '../../infrastructure/Validation.mjs'
import UserAuditLogHandler from './UserAuditLogHandler.mjs'
import UserSessionsManager from './UserSessionsManager.mjs'
import UserUpdater from './UserUpdater.mjs'
@@ -19,8 +19,8 @@ import EmailHandler from '../Email/EmailHandler.mjs'
import UrlHelper from '../Helpers/UrlHelper.mjs'
import { promisify } from 'node:util'
import { expressify } from '@overleaf/promise-utils'
import { acceptsJson } from '../../infrastructure/RequestContentTypeDetection.js'
import Modules from '../../infrastructure/Modules.js'
import { acceptsJson } from '../../infrastructure/RequestContentTypeDetection.mjs'
import Modules from '../../infrastructure/Modules.mjs'
import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.mjs'
async function _sendSecurityAlertClearedSessions(user) {

View File

@@ -14,7 +14,7 @@ import UserMembershipsHandler from '../UserMembership/UserMembershipsHandler.mjs
import UserSessionsManager from './UserSessionsManager.mjs'
import UserAuditLogHandler from './UserAuditLogHandler.mjs'
import InstitutionsAPI from '../Institutions/InstitutionsAPI.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import Errors from '../Errors/Errors.js'
import OnboardingDataCollectionManager from '../OnboardingDataCollection/OnboardingDataCollectionManager.mjs'
import EmailHandler from '../Email/EmailHandler.mjs'

View File

@@ -16,10 +16,10 @@ import AsyncFormHelper from '../Helpers/AsyncFormHelper.mjs'
import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'
import UserPrimaryEmailCheckHandler from '../User/UserPrimaryEmailCheckHandler.mjs'
import UserAuditLogHandler from './UserAuditLogHandler.mjs'
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import Features from '../../infrastructure/Features.mjs'
import tsscmp from 'tsscmp'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
const AUDIT_LOG_TOKEN_PREFIX_LENGTH = 10

View File

@@ -1,5 +1,5 @@
import { callbackify } from 'node:util'
import { db } from '../../infrastructure/mongodb.js'
import { db } from '../../infrastructure/mongodb.mjs'
import moment from 'moment'
import settings from '@overleaf/settings'
import InstitutionsAPI from '../Institutions/InstitutionsAPI.mjs'
@@ -8,9 +8,9 @@ import Errors from '../Errors/Errors.js'
import Features from '../../infrastructure/Features.mjs'
import { User } from '../../models/User.mjs'
import Mongo from '../Helpers/Mongo.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import FeaturesHelper from '../Subscription/FeaturesHelper.mjs'
import AsyncLocalStorage from '../../infrastructure/AsyncLocalStorage.js'
import AsyncLocalStorage from '../../infrastructure/AsyncLocalStorage.mjs'
const { normalizeQuery, normalizeMultiQuery } = Mongo
const InstitutionsAPIPromises = InstitutionsAPI.promises

View File

@@ -1,6 +1,6 @@
import { callbackify } from 'node:util'
import TeamInvitesHandler from '../Subscription/TeamInvitesHandler.mjs'
import { db, READ_PREFERENCE_SECONDARY } from '../../infrastructure/mongodb.js'
import { db, READ_PREFERENCE_SECONDARY } from '../../infrastructure/mongodb.mjs'
async function populateTeamInvites(user) {
return await TeamInvitesHandler.promises.createTeamInvitesForLegacyInvitedEmail(

View File

@@ -10,7 +10,7 @@ import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
import _ from 'lodash'
import { expressify } from '@overleaf/promise-utils'
import Features from '../../infrastructure/Features.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
async function settingsPage(req, res) {
const userId = SessionManager.getLoggedInUserId(req.session)

View File

@@ -1,4 +1,4 @@
import RedisWrapper from '../../infrastructure/RedisWrapper.js'
import RedisWrapper from '../../infrastructure/RedisWrapper.mjs'
const rclient = RedisWrapper.client('websessions')
const UserSessionsRedis = {

View File

@@ -1,6 +1,6 @@
import logger from '@overleaf/logger'
import OError from '@overleaf/o-error'
import { db } from '../../infrastructure/mongodb.js'
import { db } from '../../infrastructure/mongodb.mjs'
import Mongo from '../Helpers/Mongo.mjs'
import { callbackify } from 'node:util'
import UserGetter from './UserGetter.mjs'
@@ -17,10 +17,10 @@ import EmailChangeHelper from '../Analytics/EmailChangeHelper.mjs'
import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
import NotificationsBuilder from '../Notifications/NotificationsBuilder.mjs'
import _ from 'lodash'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import UserSessionsManager from './UserSessionsManager.mjs'
import ThirdPartyIdentityManager from './ThirdPartyIdentityManager.mjs'
import AsyncLocalStorage from '../../infrastructure/AsyncLocalStorage.js'
import AsyncLocalStorage from '../../infrastructure/AsyncLocalStorage.mjs'
const { normalizeQuery } = Mongo

View File

@@ -2,14 +2,14 @@ import SessionManager from '../Authentication/SessionManager.mjs'
import UserMembershipHandler from './UserMembershipHandler.mjs'
import Errors from '../Errors/Errors.js'
import EmailHelper from '../Helpers/EmailHelper.mjs'
import { csvAttachment } from '../../infrastructure/Response.js'
import { csvAttachment } from '../../infrastructure/Response.mjs'
import UserMembershipErrors from './UserMembershipErrors.mjs'
import { SSOConfig } from '../../models/SSOConfig.mjs'
import { Parser as CSVParser } from 'json2csv'
import { expressify } from '@overleaf/promise-utils'
import PlansLocator from '../Subscription/PlansLocator.mjs'
import RecurlyClient from '../Subscription/RecurlyClient.mjs'
import Modules from '../../infrastructure/Modules.js'
import Modules from '../../infrastructure/Modules.mjs'
import UserMembershipAuthorization from './UserMembershipAuthorization.mjs'
async function manageGroupMembers(req, res, next) {

View File

@@ -10,7 +10,7 @@ import EntityConfigs from './UserMembershipEntityConfigs.mjs'
import Errors from '../Errors/Errors.js'
import HttpErrorHandler from '../Errors/HttpErrorHandler.mjs'
import TemplatesManager from '../Templates/TemplatesManager.mjs'
import { z, zz, validateReq } from '../../infrastructure/Validation.js'
import { z, zz, validateReq } from '../../infrastructure/Validation.mjs'
import AdminAuthorizationHelper from '../Helpers/AdminAuthorizationHelper.mjs'
const { useAdminCapabilities } = AdminAuthorizationHelper

View File

@@ -2,7 +2,7 @@ import UserMembershipMiddleware from './UserMembershipMiddleware.mjs'
import UserMembershipController from './UserMembershipController.mjs'
import SubscriptionGroupController from '../Subscription/SubscriptionGroupController.mjs'
import TeamInvitesController from '../Subscription/TeamInvitesController.mjs'
import { RateLimiter } from '../../infrastructure/RateLimiter.js'
import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'
const rateLimiters = {

View File

@@ -1,5 +1,5 @@
// @ts-check
const { AsyncLocalStorage } = require('node:async_hooks')
import { AsyncLocalStorage } from 'node:async_hooks'
/**
* @typedef {Object} RequestContext
@@ -31,7 +31,7 @@ function removeItem(key) {
}
}
module.exports = {
export default {
middleware,
storage: asyncLocalStorage,
removeItem,

View File

@@ -9,10 +9,10 @@ import contentDisposition from 'content-disposition'
import Features from './Features.mjs'
import SessionManager from '../Features/Authentication/SessionManager.mjs'
import PackageVersions from './PackageVersions.js'
import Modules from './Modules.js'
import Modules from './Modules.mjs'
import Errors from '../Features/Errors/Errors.js'
import AdminAuthorizationHelper from '../Features/Helpers/AdminAuthorizationHelper.mjs'
import { addOptionalCleanupHandlerAfterDrainingConnections } from './GracefulShutdown.js'
import { addOptionalCleanupHandlerAfterDrainingConnections } from './GracefulShutdown.mjs'
import { sanitizeSessionUserForFrontEnd } from './FrontEndUser.mjs'
import { expressify } from '@overleaf/promise-utils'

View File

@@ -5,18 +5,19 @@
* DS207: Consider shorter variations of null checks
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
const fs = require('fs')
const OError = require('@overleaf/o-error')
const logger = require('@overleaf/logger')
const crypto = require('crypto')
const _ = require('lodash')
const Settings = require('@overleaf/settings')
const request = require('request')
const { Transform, pipeline } = require('stream')
const { FileTooLargeError } = require('../Features/Errors/Errors')
const { promisifyAll } = require('@overleaf/promise-utils')
import fs from 'node:fs'
class SizeLimitedStream extends Transform {
import OError from '@overleaf/o-error'
import logger from '@overleaf/logger'
import crypto from 'node:crypto'
import _ from 'lodash'
import Settings from '@overleaf/settings'
import request from 'request'
import { Transform, pipeline } from 'node:stream'
import { FileTooLargeError } from '../Features/Errors/Errors.js'
import { promisifyAll } from '@overleaf/promise-utils'
export class SizeLimitedStream extends Transform {
constructor(options) {
options.autoDestroy = true
super(options)
@@ -179,8 +180,8 @@ const FileWriter = {
},
}
module.exports = FileWriter
module.exports.promises = promisifyAll(FileWriter, {
FileWriter.promises = promisifyAll(FileWriter, {
without: ['ensureDumpFolderExists'],
})
module.exports.SizeLimitedStream = SizeLimitedStream
export default FileWriter

View File

@@ -9,29 +9,37 @@
- By now the node app should exit on its own.
*/
const logger = require('@overleaf/logger')
const OError = require('@overleaf/o-error')
const Settings = require('@overleaf/settings')
const Metrics = require('@overleaf/metrics')
const sleep = require('util').promisify(setTimeout)
import logger from '@overleaf/logger'
import OError from '@overleaf/o-error'
import Settings from '@overleaf/settings'
import Metrics from '@overleaf/metrics'
import { setTimeout as sleep } from 'node:timers/promises'
const optionalCleanupHandlersBeforeStoppingTraffic = []
const requiredCleanupHandlersBeforeDrainingConnections = []
const optionalCleanupHandlersAfterDrainingConnections = []
const connectionDrainer = []
function addConnectionDrainer(label, handler) {
export function addConnectionDrainer(label, handler) {
connectionDrainer.push({ label, handler })
}
function addOptionalCleanupHandlerBeforeStoppingTraffic(label, handler) {
export function addOptionalCleanupHandlerBeforeStoppingTraffic(label, handler) {
optionalCleanupHandlersBeforeStoppingTraffic.push({ label, handler })
}
function addRequiredCleanupHandlerBeforeDrainingConnections(label, handler) {
export function addRequiredCleanupHandlerBeforeDrainingConnections(
label,
handler
) {
requiredCleanupHandlersBeforeDrainingConnections.push({ label, handler })
}
function addOptionalCleanupHandlerAfterDrainingConnections(label, handler) {
export function addOptionalCleanupHandlerAfterDrainingConnections(
label,
handler
) {
optionalCleanupHandlersAfterDrainingConnections.push({ label, handler })
}
@@ -55,7 +63,7 @@ async function runHandlers(stage, handlers, logOnly) {
* @param {import('net').Server} [server]
* @param {number|string} [signal]
*/
async function gracefulShutdown(server, signal) {
export async function gracefulShutdown(server, signal) {
logger.warn({ signal }, 'graceful shutdown: started shutdown sequence')
Settings.shuttingDown = true
@@ -110,7 +118,7 @@ async function gracefulShutdown(server, signal) {
logger.info({}, 'graceful shutdown: ready to exit')
}
function triggerGracefulShutdown(server, signal) {
export function triggerGracefulShutdown(server, signal) {
gracefulShutdown(server, signal).catch(err => {
logger.err(
{ err },
@@ -119,7 +127,7 @@ function triggerGracefulShutdown(server, signal) {
})
}
class BackgroundTaskTracker {
export class BackgroundTaskTracker {
constructor(label) {
// Do not leak any handles, just record the number of pending jobs.
// In case we miss the cleanup of one job, the worst thing that can happen
@@ -141,7 +149,7 @@ class BackgroundTaskTracker {
}
}
module.exports = {
export default {
BackgroundTaskTracker,
addConnectionDrainer,
addOptionalCleanupHandlerBeforeStoppingTraffic,

View File

@@ -1,6 +1,6 @@
// @ts-check
const Settings = require('@overleaf/settings')
import Settings from '@overleaf/settings'
/**
* @import { HttpPermissionsPolicy } from './types'
@@ -85,4 +85,4 @@ class HttpPermissionsPolicyMiddleware {
}
}
module.exports = HttpPermissionsPolicyMiddleware
export default HttpPermissionsPolicyMiddleware

View File

@@ -1,9 +1,8 @@
const settings = require('@overleaf/settings')
const RedisWrapper = require('./RedisWrapper')
import settings from '@overleaf/settings'
import RedisWrapper from './RedisWrapper.mjs'
import RedisWebLocker from '@overleaf/redis-wrapper/RedisWebLocker.js'
const rclient = RedisWrapper.client('lock')
const RedisWebLocker = require('@overleaf/redis-wrapper/RedisWebLocker')
// this method creates a lock manager with the provided timeout options
function createLockManager(options) {
return new RedisWebLocker({
@@ -33,4 +32,4 @@ LockManager.withTimeout = function (timeout) {
return createLockManager(lockManagerSettingsWithTimeout)
}
module.exports = LockManager
export default LockManager

View File

@@ -1,22 +1,28 @@
// @ts-check
const Metrics = require('@overleaf/metrics')
import Metrics from '@overleaf/metrics'
exports.analyticsQueue = new Metrics.prom.Counter({
const analyticsQueue = new Metrics.prom.Counter({
name: 'analytics_queue',
help: 'Number of events sent to the analytics queue',
labelNames: ['status', 'event_type'],
})
exports.revertFileDurationSeconds = new Metrics.prom.Histogram({
const revertFileDurationSeconds = new Metrics.prom.Histogram({
name: 'timer_revert_file_duration_seconds',
help: 'Duration of the file restore operation',
buckets: [0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5],
labelNames: ['type'],
})
exports.revertProjectDurationSeconds = new Metrics.prom.Histogram({
const revertProjectDurationSeconds = new Metrics.prom.Histogram({
name: 'timer_revert_project_duration_seconds',
help: 'Duration of the project restore operation',
buckets: [0.5, 1, 2, 5, 10, 30, 60, 120, 300, 900, 1800],
})
export default {
analyticsQueue,
revertFileDurationSeconds,
revertProjectDurationSeconds,
}

View File

@@ -1,17 +1,18 @@
// @ts-check
const fs = require('fs')
const Path = require('path')
const { promisify, callbackify } = require('util')
const Settings = require('@overleaf/settings')
const Views = require('./Views')
const _ = require('lodash')
const Metrics = require('@overleaf/metrics')
import fs from 'node:fs'
import Path from 'node:path'
import { promisify, callbackify } from 'node:util'
import Settings from '@overleaf/settings'
import Views from './Views.mjs'
import _ from 'lodash'
import Metrics from '@overleaf/metrics'
/** @import { WebModule } from "../../../types/web-module" */
/** @import { RequestHandler } from "express" */
const MODULE_BASE_PATH = Path.join(__dirname, '/../../../modules')
const MODULE_BASE_PATH = Path.join(import.meta.dirname, '/../../../modules')
/** @type {WebModule[]} */
const _modules = []
@@ -207,7 +208,7 @@ async function getMiddleware(name) {
return _middleware[name] || []
}
module.exports = {
export default {
applyNonCsrfRouter,
applyRouter,
linkedFileAgentsIncludes,

View File

@@ -1,8 +1,8 @@
const mongoose = require('mongoose')
const Settings = require('@overleaf/settings')
const Metrics = require('@overleaf/metrics')
const logger = require('@overleaf/logger')
const { addConnectionDrainer } = require('./GracefulShutdown')
import mongoose from 'mongoose'
import Settings from '@overleaf/settings'
import Metrics from '@overleaf/metrics'
import logger from '@overleaf/logger'
import { addConnectionDrainer } from './GracefulShutdown.mjs'
mongoose.set('autoIndex', false)
mongoose.set('strictQuery', false)
@@ -54,4 +54,4 @@ mongoose.Promise = global.Promise
mongoose.connectionPromise = connectionPromise
module.exports = mongoose
export default mongoose

View File

@@ -7,12 +7,12 @@ import FeaturesUpdater from '../Features/Subscription/FeaturesUpdater.mjs'
import {
addOptionalCleanupHandlerBeforeStoppingTraffic,
addRequiredCleanupHandlerBeforeDrainingConnections,
} from './GracefulShutdown.js'
} from './GracefulShutdown.mjs'
import EmailHandler from '../Features/Email/EmailHandler.mjs'
import logger from '@overleaf/logger'
import OError from '@overleaf/o-error'
import Modules from './Modules.js'
import Modules from './Modules.mjs'
/**
* @typedef {{

View File

@@ -1,7 +1,7 @@
import Queue from 'bull'
import Settings from '@overleaf/settings'
import Features from '../infrastructure/Features.mjs'
import { addConnectionDrainer } from './GracefulShutdown.js'
import { addConnectionDrainer } from './GracefulShutdown.mjs'
// Bull will keep a fixed number of the most recently completed jobs. This is
// useful to inspect recently completed jobs. The bull prometheus exporter also

View File

@@ -1,16 +1,16 @@
const Settings = require('@overleaf/settings')
const Metrics = require('@overleaf/metrics')
const logger = require('@overleaf/logger')
const RedisWrapper = require('./RedisWrapper')
const RateLimiterFlexible = require('rate-limiter-flexible')
const OError = require('@overleaf/o-error')
import Settings from '@overleaf/settings'
import Metrics from '@overleaf/metrics'
import logger from '@overleaf/logger'
import RedisWrapper from './RedisWrapper.mjs'
import RateLimiterFlexible from 'rate-limiter-flexible'
import OError from '@overleaf/o-error'
const rclient = RedisWrapper.client('ratelimiter')
/**
* Wrapper over the RateLimiterRedis class
*/
class RateLimiter {
export class RateLimiter {
#opts
/**
@@ -122,13 +122,13 @@ class RateLimiter {
* Shared rate limiters
*/
const openProjectRateLimiter = new RateLimiter('open-project', {
export const openProjectRateLimiter = new RateLimiter('open-project', {
points: 15,
duration: 60,
})
// Keep in sync with the can-skip-captcha options.
const overleafLoginRateLimiter = new RateLimiter(
export const overleafLoginRateLimiter = new RateLimiter(
'overleaf-login',
Settings.rateLimit?.login?.ip || {
points: 20,
@@ -137,7 +137,7 @@ const overleafLoginRateLimiter = new RateLimiter(
}
)
module.exports = {
export default {
RateLimiter,
openProjectRateLimiter,
overleafLoginRateLimiter,

View File

@@ -1,6 +1,6 @@
const Settings = require('@overleaf/settings')
const redis = require('@overleaf/redis-wrapper')
const { addConnectionDrainer } = require('./GracefulShutdown')
import Settings from '@overleaf/settings'
import redis from '@overleaf/redis-wrapper'
import { addConnectionDrainer } from './GracefulShutdown.mjs'
/**
* A per-feature interface to Redis, looks up the feature in `settings.redis`
@@ -23,4 +23,4 @@ async function cleanupTestRedis() {
await redis.cleanupTestRedis(rclient)
}
module.exports = { client, cleanupTestRedis }
export default { client, cleanupTestRedis }

View File

@@ -1,5 +0,0 @@
module.exports = {
acceptsJson(req) {
return req.accepts(['html', 'json']) === 'json'
},
}

View File

@@ -0,0 +1,3 @@
export function acceptsJson(req) {
return req.accepts(['html', 'json']) === 'json'
}

View File

@@ -1,4 +1,4 @@
function csvAttachment(res, body, filename) {
export function csvAttachment(res, body, filename) {
if (!filename || !filename.endsWith('.csv')) {
throw new Error('filename must end with .csv')
}
@@ -8,23 +8,23 @@ function csvAttachment(res, body, filename) {
res.send(body)
}
function preparePlainTextResponse(res) {
export function preparePlainTextResponse(res) {
res.setHeader('X-Content-Type-Options', 'nosniff')
res.contentType('text/plain; charset=utf-8')
}
function plainTextResponse(res, body) {
export function plainTextResponse(res, body) {
preparePlainTextResponse(res)
res.send(body)
}
function xmlResponse(res, body) {
export function xmlResponse(res, body) {
res.setHeader('X-Content-Type-Options', 'nosniff')
res.contentType('application/xml; charset=utf-8')
res.send(body)
}
function prepareZipAttachment(res, filename) {
export function prepareZipAttachment(res, filename) {
if (!filename || !filename.endsWith('.zip')) {
throw new Error('filename must end with .zip')
}
@@ -33,12 +33,12 @@ function prepareZipAttachment(res, filename) {
res.setHeader('X-Content-Type-Options', 'nosniff')
}
function zipAttachment(res, body, filename) {
export function zipAttachment(res, body, filename) {
prepareZipAttachment(res, filename)
res.send(body)
}
module.exports = {
export default {
csvAttachment,
plainTextResponse,
preparePlainTextResponse,

View File

@@ -1,5 +1,5 @@
import express from 'express'
import { plainTextResponse } from './Response.js'
import { plainTextResponse } from './Response.mjs'
/*
This wrapper is implemented specifically to handle "Premature Close" errors.

Some files were not shown because too many files have changed in this diff Show More