From b115edc0a57ea3fb0f922aece53a6b82d830db7b Mon Sep 17 00:00:00 2001 From: Andrew Rumble Date: Thu, 16 Apr 2026 15:01:22 +0200 Subject: [PATCH] Merge pull request #32505 from overleaf/ar-remove-several-usages-of-request [web] remove several usages of request GitOrigin-RevId: d6259bd47342f6ca4ab6ed6fc71b58f4b4962eee --- services/web/app/src/Features/V1/V1Api.mjs | 6 +- .../web/app/src/infrastructure/FileWriter.mjs | 61 +++++++------------ 2 files changed, 26 insertions(+), 41 deletions(-) diff --git a/services/web/app/src/Features/V1/V1Api.mjs b/services/web/app/src/Features/V1/V1Api.mjs index 4aa5f1072f..be8e4ef988 100644 --- a/services/web/app/src/Features/V1/V1Api.mjs +++ b/services/web/app/src/Features/V1/V1Api.mjs @@ -70,9 +70,9 @@ function _responseHandler(options, error, response, body, callback) { const V1Api = { request: makeRequest, + promises: { + request: promisifyMultiResult(makeRequest, ['response', 'body']), + }, } -V1Api.promises = { - request: promisifyMultiResult(V1Api.request, ['response', 'body']), -} export default V1Api diff --git a/services/web/app/src/infrastructure/FileWriter.mjs b/services/web/app/src/infrastructure/FileWriter.mjs index c1eda7fb15..e878f3db94 100644 --- a/services/web/app/src/infrastructure/FileWriter.mjs +++ b/services/web/app/src/infrastructure/FileWriter.mjs @@ -10,12 +10,11 @@ import fs from 'node:fs' 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 { fetchStream } from '@overleaf/fetch-utils' import { Transform, pipeline } from 'node:stream' import { FileTooLargeError } from '../Features/Errors/Errors.js' -import { promisify } from '@overleaf/promise-utils' +import { callbackify, promisify } from '@overleaf/promise-utils' export class SizeLimitedStream extends Transform { constructor(options) { @@ -146,47 +145,33 @@ const FileWriter = { callback(null, fsPath) }) }, - - writeUrlToDisk(identifier, url, options, callback) { - if (typeof options === 'function') { - callback = options - options = {} - } - if (callback == null) { - callback = function () {} - } - options = options || {} - callback = _.once(callback) - - const stream = request.get(url) - const errorHandler = function (err) { - logger.warn( - { err, identifier, url }, - '[writeUrlToDisk] something went wrong with writing to disk' - ) - callback(err) - } - stream.on('error', errorHandler) - stream.on('response', function (response) { - stream.removeListener('error', errorHandler) - if (response.statusCode >= 200 && response.statusCode < 300) { - FileWriter.writeStreamToDisk(identifier, stream, options, callback) - } else { - const err = new OError('bad response from url', { - statusCode: response.statusCode, - }) - logger.warn({ err, identifier, url }, `[writeUrlToDisk] ${err.message}`) - return callback(err) - } - }) - }, } +async function writeUrlToDisk(identifier, url, options = {}) { + let stream + try { + stream = await fetchStream(url) + } catch (error) { + const err = new OError('bad response from url', { + statusCode: error.response?.status, + }) + logger.warn({ err, identifier, url }, `[writeUrlToDisk] ${err.message}`) + throw err + } + return await FileWriter.promises.writeStreamToDisk( + identifier, + stream, + options + ) +} + +FileWriter.writeUrlToDisk = callbackify(writeUrlToDisk) + FileWriter.promises = { writeLinesToDisk: promisify(FileWriter.writeLinesToDisk), writeContentToDisk: promisify(FileWriter.writeContentToDisk), writeStreamToDisk: promisify(FileWriter.writeStreamToDisk), - writeUrlToDisk: promisify(FileWriter.writeUrlToDisk), + writeUrlToDisk, } export default FileWriter