From 01ca6c7d4c78d4872a3bf10ab096af66b698d361 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me>
Date: Tue, 1 Aug 2023 02:15:51 +0200
Subject: [PATCH] Add compression capability

---
 ExpressAPI/package-lock.json  | 52 +++++++++++++++++++++++++++++++++++
 ExpressAPI/package.json       |  2 ++
 ExpressAPI/src/express/API.ts |  2 ++
 3 files changed, 56 insertions(+)

diff --git a/ExpressAPI/package-lock.json b/ExpressAPI/package-lock.json
index 11db042..097800a 100644
--- a/ExpressAPI/package-lock.json
+++ b/ExpressAPI/package-lock.json
@@ -11,6 +11,7 @@
                 "@prisma/client": "^5.0.0",
                 "axios": "^1.4.0",
                 "bcryptjs": "^2.4.3",
+                "compression": "^1.7.4",
                 "cors": "^2.8.5",
                 "dotenv": "^16.0.3",
                 "express": "^4.18.2",
@@ -31,6 +32,7 @@
             },
             "devDependencies": {
                 "@types/bcryptjs": "^2.4.2",
+                "@types/compression": "^1.7.2",
                 "@types/cors": "^2.8.13",
                 "@types/express": "^4.17.17",
                 "@types/jsonwebtoken": "^9.0.2",
@@ -173,6 +175,15 @@
                 "@types/node": "*"
             }
         },
+        "node_modules/@types/compression": {
+            "version": "1.7.2",
+            "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.7.2.tgz",
+            "integrity": "sha512-lwEL4M/uAGWngWFLSG87ZDr2kLrbuR8p7X+QZB1OQlT+qkHsCPDVFnHPyXf4Vyl4yDDorNY+mAhosxkCvppatg==",
+            "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",
@@ -612,6 +623,47 @@
                 "node": "^12.20.0 || >=14"
             }
         },
+        "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/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",
diff --git a/ExpressAPI/package.json b/ExpressAPI/package.json
index 445d334..3593ffa 100644
--- a/ExpressAPI/package.json
+++ b/ExpressAPI/package.json
@@ -22,6 +22,7 @@
         "@prisma/client"   : "^5.0.0",
         "axios"            : "^1.4.0",
         "bcryptjs"         : "^2.4.3",
+        "compression"      : "^1.7.4",
         "cors"             : "^2.8.5",
         "dotenv"           : "^16.0.3",
         "express"          : "^4.18.2",
@@ -42,6 +43,7 @@
     },
     "devDependencies": {
         "@types/bcryptjs"         : "^2.4.2",
+        "@types/compression"      : "^1.7.2",
         "@types/cors"             : "^2.8.13",
         "@types/express"          : "^4.17.17",
         "@types/jsonwebtoken"     : "^9.0.2",
diff --git a/ExpressAPI/src/express/API.ts b/ExpressAPI/src/express/API.ts
index be90d02..b705aa6 100644
--- a/ExpressAPI/src/express/API.ts
+++ b/ExpressAPI/src/express/API.ts
@@ -12,6 +12,7 @@ import Config                from '../config/Config';
 import logger                from '../shared/logging/WinstonLogger';
 import ParamsCallbackManager from '../middlewares/ParamsCallbackManager';
 import ApiRoutesManager      from '../routes/ApiRoutesManager';
+import compression           from 'compression';
 
 
 class API implements WorkerTask {
@@ -27,6 +28,7 @@ class API implements WorkerTask {
         this.backend.use(morganMiddleware); //Log API accesses
         this.backend.use(helmet()); //Help to secure express, https://helmetjs.github.io/
         this.backend.use(cors()); //Allow CORS requests
+        this.backend.use(compression()); //Compress responses
 
         ParamsCallbackManager.register(this.backend);
 
-- 
GitLab