diff --git a/packages/safe-chain/src/registryProxy/interceptors/interceptorBuilder.js b/packages/safe-chain/src/registryProxy/interceptors/interceptorBuilder.js index 003aae7..e25e641 100644 --- a/packages/safe-chain/src/registryProxy/interceptors/interceptorBuilder.js +++ b/packages/safe-chain/src/registryProxy/interceptors/interceptorBuilder.js @@ -10,14 +10,14 @@ import { EventEmitter } from "events"; * @typedef {Object} RequestInterceptionContext * @property {string} targetUrl * @property {(packageName: string | undefined, version: string | undefined) => void} blockMalware - * @property {(modificationFunc: (headers: NodeJS.Dict) => void) => void} modifyRequestHeaders + * @property {(modificationFunc: (headers: NodeJS.Dict) => NodeJS.Dict) => void} modifyRequestHeaders * @property {(modificationFunc: (body: Buffer, headers: NodeJS.Dict | undefined) => Buffer) => void} modifyBody * @property {() => RequestInterceptionHandler} build * * * @typedef {Object} RequestInterceptionHandler * @property {{statusCode: number, message: string} | undefined} blockResponse - * @property {(headers: NodeJS.Dict | undefined) => void} modifyRequestHeaders + * @property {(headers: NodeJS.Dict | undefined) => NodeJS.Dict | undefined} modifyRequestHeaders * @property {() => boolean} modifiesResponse * @property {(body: Buffer, headers: NodeJS.Dict | undefined) => Buffer} modifyBody */ @@ -65,7 +65,7 @@ function buildInterceptor(requestHandlers) { function createRequestContext(targetUrl, eventEmitter) { /** @type {{statusCode: number, message: string} | undefined} */ let blockResponse = undefined; - /** @type {Array<(headers: NodeJS.Dict) => void>} */ + /** @type {Array<(headers: NodeJS.Dict) => NodeJS.Dict>} */ let reqheaderModificationFuncs = []; /** @type {Array<(body: Buffer, headers: NodeJS.Dict | undefined) => Buffer>} */ let modifyBodyFuncs = []; @@ -91,13 +91,18 @@ function createRequestContext(targetUrl, eventEmitter) { /** @returns {RequestInterceptionHandler} */ function build() { - /** @param {NodeJS.Dict | undefined} headers */ + /** + * @param {NodeJS.Dict | undefined} headers + * @returns {NodeJS.Dict | undefined} + */ function modifyRequestHeaders(headers) { - if (!headers) return; - - for (const func of reqheaderModificationFuncs) { - func(headers); + if (headers) { + for (const func of reqheaderModificationFuncs) { + func(headers); + } } + + return headers; } /** diff --git a/packages/safe-chain/src/registryProxy/interceptors/npm/modifyNpmInfo.js b/packages/safe-chain/src/registryProxy/interceptors/npm/modifyNpmInfo.js index 0e7e41d..47c63d0 100644 --- a/packages/safe-chain/src/registryProxy/interceptors/npm/modifyNpmInfo.js +++ b/packages/safe-chain/src/registryProxy/interceptors/npm/modifyNpmInfo.js @@ -8,6 +8,7 @@ const state = { /** * @param {NodeJS.Dict} headers + * @returns {NodeJS.Dict} */ export function modifyNpmInfoRequestHeaders(headers) { const accept = getHeaderValueAsString(headers, "accept"); @@ -17,6 +18,7 @@ export function modifyNpmInfoRequestHeaders(headers) { // Force the registry to return the full metadata by changing the Accept header. headers["accept"] = "application/json"; } + return headers; } /** diff --git a/packages/safe-chain/src/registryProxy/mitmRequestHandler.js b/packages/safe-chain/src/registryProxy/mitmRequestHandler.js index 9afadaa..9845cd2 100644 --- a/packages/safe-chain/src/registryProxy/mitmRequestHandler.js +++ b/packages/safe-chain/src/registryProxy/mitmRequestHandler.js @@ -151,11 +151,12 @@ function forwardRequest(req, hostname, res, requestHandler) { * @returns {import("http").ClientRequest} */ function createProxyRequest(hostname, req, res, requestHandler) { - const headers = { ...req.headers }; + /** @type {NodeJS.Dict | undefined} */ + let headers = { ...req.headers }; if (headers.host) { delete headers.host; } - requestHandler.modifyRequestHeaders(headers); + headers = requestHandler.modifyRequestHeaders(headers); /** @type {import("http").RequestOptions} */ const options = {