From 22be85f72c9d864bcc33d031bb7e8dd65bccb39c Mon Sep 17 00:00:00 2001 From: Grzegorz Godlewski Date: Thu, 14 Sep 2023 15:53:33 +0200 Subject: [PATCH] Add express compression --- package-lock.json | 134 +++++++++++++++++++++++ package.json | 6 +- src/containers/server/ServerContainer.ts | 10 ++ 3 files changed, 148 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 32b077e4..4acd4857 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,7 @@ "buffer": "^5.7.1", "casual": "1.6.2", "cli-progress": "3.10.0", + "compression": "1.7.4", "cookie-parser": "1.4.6", "dayjs": "1.11.1", "dockerode": "3.3.2", @@ -75,6 +76,7 @@ "@swc/core": "1.3.24", "@swc/helpers": "0.4.14", "@types/async": "3.2.12", + "@types/compression": "1.7.3", "@types/dockerode": "3.3.9", "@types/express": "4.17.13", "@types/lunr": "2.3.4", @@ -1196,6 +1198,15 @@ "@types/node": "*" } }, + "node_modules/@types/compression": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-rKquEGjebqizyHNMOpaE/4FdYR5VQiWFeesqYfvJU0seSEyB4625UGhNOO/qIkH10S3wftiV7oefc8WdLZ/gCQ==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -2292,6 +2303,60 @@ "url": "https://www.patreon.com/infusion" } }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4598,6 +4663,14 @@ "node": ">= 0.8" } }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -6978,6 +7051,15 @@ "@types/node": "*" } }, + "@types/compression": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-rKquEGjebqizyHNMOpaE/4FdYR5VQiWFeesqYfvJU0seSEyB4625UGhNOO/qIkH10S3wftiV7oefc8WdLZ/gCQ==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, "@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -7819,6 +7901,53 @@ "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==" }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -9591,6 +9720,11 @@ "ee-first": "1.1.1" } }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", diff --git a/package.json b/package.json index 8134108a..5c20fccb 100644 --- a/package.json +++ b/package.json @@ -75,16 +75,17 @@ "@opentelemetry/instrumentation-fetch": "0.34.0", "@opentelemetry/instrumentation-http": "0.34.0", "@opentelemetry/resources": "1.8.0", - "@opentelemetry/sdk-trace-node": "1.8.0", "@opentelemetry/sdk-trace-base": "1.8.0", + "@opentelemetry/sdk-trace-node": "1.8.0", "@opentelemetry/sdk-trace-web": "1.8.0", "@opentelemetry/semantic-conventions": "1.8.0", "@vitejs/plugin-vue": "4.0.0", "async": "3.2.3", - "buffer": "^5.7.1", "bootstrap": "5.2.3", + "buffer": "^5.7.1", "casual": "1.6.2", "cli-progress": "3.10.0", + "compression": "1.7.4", "cookie-parser": "1.4.6", "dayjs": "1.11.1", "dockerode": "3.3.2", @@ -125,6 +126,7 @@ "@swc/core": "1.3.24", "@swc/helpers": "0.4.14", "@types/async": "3.2.12", + "@types/compression": "1.7.3", "@types/dockerode": "3.3.9", "@types/express": "4.17.13", "@types/lunr": "2.3.4", diff --git a/src/containers/server/ServerContainer.ts b/src/containers/server/ServerContainer.ts index 7f98de9d..1bb43dae 100644 --- a/src/containers/server/ServerContainer.ts +++ b/src/containers/server/ServerContainer.ts @@ -43,6 +43,7 @@ import {GoogleApiContainer} from '../google_api/GoogleApiContainer'; import {UserAuthClient} from '../../google/AuthClient'; import {getTokenInfo} from '../../google/GoogleAuthService'; import {GoogleTreeProcessor} from '../google_folder/GoogleTreeProcessor'; +import compress from 'compression'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -362,6 +363,15 @@ export class ServerContainer extends Container { } async initRouter(app) { + app.use(async (req: express.Request, res: express.Response, next: NextFunction) => { + if (req.path.startsWith('/api/')) { + this.logger.info(`${req.method} ${req.path}`); + } + next(); + }); + + app.use(compress()); + const driveController = new DriveController('/api/drive', this.filesService, this.engine.getContainer('folder_registry'), this.authContainer); app.use('/api/drive', authenticate(this.logger), await driveController.getRouter());