From fdc092371b2ce99972651cbbd50c9741c08ba507 Mon Sep 17 00:00:00 2001 From: yu-i-i Date: Mon, 16 Mar 2026 02:04:54 +0100 Subject: [PATCH] Sandboxed compiles: convert DockerRunner to ESM --- services/clsi/app/js/CommandRunner.js | 2 +- .../js/{DockerRunner.js => DockerRunner.mjs} | 23 ++++++++++--------- services/clsi/config/settings.defaults.cjs | 2 +- .../clsi/test/unit/js/DockerRunner.test.js | 2 +- 4 files changed, 15 insertions(+), 14 deletions(-) rename services/clsi/app/js/{DockerRunner.js => DockerRunner.mjs} (97%) diff --git a/services/clsi/app/js/CommandRunner.js b/services/clsi/app/js/CommandRunner.js index d98cfcc4d3..02cfe1670a 100644 --- a/services/clsi/app/js/CommandRunner.js +++ b/services/clsi/app/js/CommandRunner.js @@ -10,7 +10,7 @@ import logger from '@overleaf/logger' let commandRunnerPath if ((Settings.clsi != null ? Settings.clsi.dockerRunner : undefined) === true) { - commandRunnerPath = './DockerRunner.js' + commandRunnerPath = './DockerRunner.mjs' } else { commandRunnerPath = './LocalCommandRunner.js' } diff --git a/services/clsi/app/js/DockerRunner.js b/services/clsi/app/js/DockerRunner.mjs similarity index 97% rename from services/clsi/app/js/DockerRunner.js rename to services/clsi/app/js/DockerRunner.mjs index 02185cc1c0..07fd3c7961 100644 --- a/services/clsi/app/js/DockerRunner.js +++ b/services/clsi/app/js/DockerRunner.mjs @@ -1,13 +1,14 @@ -const { promisify } = require('node:util') -const Settings = require('@overleaf/settings') -const logger = require('@overleaf/logger') -const Docker = require('dockerode') +import { promisify } from 'node:util' +import Settings from '@overleaf/settings' +import logger from '@overleaf/logger' +import Docker from 'dockerode' +import crypto from 'node:crypto' +import async from 'async' +import LockManager from './DockerLockManager.js' +import Path from 'node:path' +import _ from 'lodash' + const dockerode = new Docker() -const crypto = require('node:crypto') -const async = require('async') -const LockManager = require('./DockerLockManager') -const Path = require('node:path') -const _ = require('lodash') const ONE_HOUR_IN_MS = 60 * 60 * 1000 logger.debug('using docker runner') @@ -602,8 +603,8 @@ const DockerRunner = { DockerRunner.startContainerMonitor() -module.exports = DockerRunner -module.exports.promises = { +DockerRunner.promises = { run: promisify(DockerRunner.run), kill: promisify(DockerRunner.kill), } +export default DockerRunner diff --git a/services/clsi/config/settings.defaults.cjs b/services/clsi/config/settings.defaults.cjs index 2a01762389..d57c2373f3 100644 --- a/services/clsi/config/settings.defaults.cjs +++ b/services/clsi/config/settings.defaults.cjs @@ -118,7 +118,7 @@ if (process.env.ALLOWED_COMPILE_GROUPS) { if ((process.env.DOCKER_RUNNER || process.env.SANDBOXED_COMPILES) === 'true') { if ( - !fs.existsSync(Path.join(__dirname, '..', 'app', 'js', 'DockerRunner.js')) + !fs.existsSync(Path.join(__dirname, '..', 'app', 'js', 'DockerRunner.mjs')) ) { console.error( 'Sandboxed compiles are only available with Overleaf Server Pro. Compare Server Pro with Community Edition here: https://docs.overleaf.com/on-premises/welcome/server-pro-vs.-community-edition' diff --git a/services/clsi/test/unit/js/DockerRunner.test.js b/services/clsi/test/unit/js/DockerRunner.test.js index 608838d975..6df1c58083 100644 --- a/services/clsi/test/unit/js/DockerRunner.test.js +++ b/services/clsi/test/unit/js/DockerRunner.test.js @@ -5,7 +5,7 @@ import Path from 'node:path' const modulePath = Path.join( import.meta.dirname, - '../../../app/js/DockerRunner' + '../../../app/js/DockerRunner.mjs' ) describe('DockerRunner', () => {