diff --git a/NodeApp/.eslintignore b/NodeApp/.eslintignore
deleted file mode 100644
index ecded56c0bd829718e46ffea13b1e3b6791c794e..0000000000000000000000000000000000000000
--- a/NodeApp/.eslintignore
+++ /dev/null
@@ -1,3 +0,0 @@
-dist
-node_modules
-.gitlab-ci
\ No newline at end of file
diff --git a/NodeApp/.eslintrc.json b/NodeApp/.eslintrc.json
deleted file mode 100644
index be8c02d07111eec0c73437a65326e56150fda24d..0000000000000000000000000000000000000000
--- a/NodeApp/.eslintrc.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-    "root"   : true,
-    "parser" : "@typescript-eslint/parser",
-    "plugins": [
-        "@typescript-eslint"
-    ],
-    "extends": [
-        "eslint:recommended",
-        "plugin:@typescript-eslint/recommended"
-    ]
-}
\ No newline at end of file
diff --git a/NodeApp/.idea/jsLinters/eslint.xml b/NodeApp/.idea/jsLinters/eslint.xml
index 541945bb0819b8ff4a3dae9431632ebd10e6f98b..8f07b941341104616456519be3dc0a7cd019c07d 100644
--- a/NodeApp/.idea/jsLinters/eslint.xml
+++ b/NodeApp/.idea/jsLinters/eslint.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="EslintConfiguration">
+    <custom-configuration-file used="false" path="./eslint.config.js" />
     <option name="fix-on-save" value="true" />
   </component>
 </project>
\ No newline at end of file
diff --git a/NodeApp/eslint.config.js b/NodeApp/eslint.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..961e9fb812497cdf22daeacb74a45c68d849c360
--- /dev/null
+++ b/NodeApp/eslint.config.js
@@ -0,0 +1,25 @@
+// @ts-check
+// @formatter:off
+
+import eslint from '@eslint/js';
+import tseslint from 'typescript-eslint';
+
+
+export default tseslint.config({
+                                   ignores: [ 'dist/*', 'node_modules/*', '.gitlab-ci.yml', 'eslint.config.js' ]
+                               }, eslint.configs.recommended, ...tseslint.configs.recommendedTypeChecked, {
+                                   languageOptions: {
+                                       parserOptions: {
+                                           project: true, tsconfigRootDir: import.meta.dirname
+                                       }
+                                   }
+                               }, {
+                                   plugins: {
+                                       '@typescript-eslint': tseslint.plugin
+                                   }, rules: {
+                                       '@typescript-eslint/no-unsafe-assignment': 'off',
+                                       '@typescript-eslint/no-unsafe-member-access': 'off',
+                                       '@typescript-eslint/require-await': 'off',
+                                       '@typescript-eslint/restrict-template-expressions': 'off',
+                                   }
+                               });
\ No newline at end of file
diff --git a/NodeApp/package-lock.json b/NodeApp/package-lock.json
index a5b74384cb878dde7b4ebb2ef70420203e916a06..c8b5e6ad916360e29ab432389783085e2bed0c77 100644
--- a/NodeApp/package-lock.json
+++ b/NodeApp/package-lock.json
@@ -42,17 +42,19 @@
                 "@types/fs-extra": "^11.0.4",
                 "@types/inquirer": "^8.2.10",
                 "@types/jsonwebtoken": "^8.5.9",
-                "@types/node": "^18.19.26",
-                "@types/semver": "^7.5.8",
+                "@types/node": "^18.19.2",
+                "@types/semver": "^7.5.6",
                 "@types/tar-stream": "^3.1.3",
+                "@typescript-eslint/eslint-plugin": "^7.7.0",
+                "@typescript-eslint/parser": "^7.7.0",
                 "dotenv-vault": "^1.25.0",
                 "eslint": "^8.57.0",
                 "genversion": "^3.2.0",
                 "pkg": "^5.8.1",
                 "tiny-typed-emitter": "^2.1.0",
                 "tsx": "^4.7.1",
-                "typescript": "^5.4.2",
-                "typescript-eslint": "^7.4.0"
+                "typescript": "^5.4.5",
+                "typescript-eslint": "^7.7.0"
             }
         },
         "node_modules/@aashutoshrathi/word-wrap": {
@@ -583,6 +585,16 @@
             "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
             "dev": true
         },
+        "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+            "version": "1.1.11",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "dev": true,
+            "dependencies": {
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
+            }
+        },
         "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
             "version": "4.1.0",
             "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -595,6 +607,18 @@
                 "js-yaml": "bin/js-yaml.js"
             }
         },
+        "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "dev": true,
+            "dependencies": {
+                "brace-expansion": "^1.1.7"
+            },
+            "engines": {
+                "node": "*"
+            }
+        },
         "node_modules/@eslint/js": {
             "version": "8.57.0",
             "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
@@ -605,11 +629,11 @@
             }
         },
         "node_modules/@gitbeaker/core": {
-            "version": "40.0.2",
-            "resolved": "https://registry.npmjs.org/@gitbeaker/core/-/core-40.0.2.tgz",
-            "integrity": "sha512-rF2Wx4Ka1F2bo6iPdrp3yypprBHMP7VkReZXGYFohWrQX2CREZmq+2bXlY5rLdIv5pFvxZ91uLqKLiJtGFzoCQ==",
+            "version": "40.0.3",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/core/-/core-40.0.3.tgz",
+            "integrity": "sha512-MzeY4oCtoa9zmPIkQIdC2KU8cGmHIXwnAi0L6jjjouqjy6kcA4BydZf8W5Xsj27Rw5iiyhfj8YC1/O3CgrzvCQ==",
             "dependencies": {
-                "@gitbeaker/requester-utils": "^40.0.2",
+                "@gitbeaker/requester-utils": "^40.0.3",
                 "qs": "^6.11.2",
                 "xcase": "^2.0.1"
             },
@@ -618,9 +642,9 @@
             }
         },
         "node_modules/@gitbeaker/requester-utils": {
-            "version": "40.0.2",
-            "resolved": "https://registry.npmjs.org/@gitbeaker/requester-utils/-/requester-utils-40.0.2.tgz",
-            "integrity": "sha512-6T/ARwJ1UG+kuBCe18mgUeYdTXJJzUIO8y1taKWDLtYrJLzcS490k8BuIfeNahhdGjLDtTQ0o2eCMK1nfpgNYw==",
+            "version": "40.0.3",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/requester-utils/-/requester-utils-40.0.3.tgz",
+            "integrity": "sha512-L8JpuMIsvXTHfu/2wXzkc5QyfQJSWg4XyEPStHq1ig5SAcbxxqbBoe8ed27eUXLah+PcGrPInMK4cCMxhQm41g==",
             "dependencies": {
                 "picomatch-browser": "^2.2.6",
                 "qs": "^6.11.2",
@@ -632,12 +656,12 @@
             }
         },
         "node_modules/@gitbeaker/rest": {
-            "version": "40.0.2",
-            "resolved": "https://registry.npmjs.org/@gitbeaker/rest/-/rest-40.0.2.tgz",
-            "integrity": "sha512-CWpQ7kvrxzqL8mUR2KIciGQoHf4wCeGT6jM6ngDpzV/j4/ASIEqSnTV7YQAs+VbGu3ZCu7XM3l8Q5JVlMHQabQ==",
+            "version": "40.0.3",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/rest/-/rest-40.0.3.tgz",
+            "integrity": "sha512-ihaA0GX3yCo4oUWbISkcjFMIw+WxDAC9L+bEYq2irz4wpv/0EpAU/0jKjggPzY4cGWL9VAyPhew77VeACv4YWw==",
             "dependencies": {
-                "@gitbeaker/core": "^40.0.2",
-                "@gitbeaker/requester-utils": "^40.0.2"
+                "@gitbeaker/core": "^40.0.3",
+                "@gitbeaker/requester-utils": "^40.0.3"
             },
             "engines": {
                 "node": ">=18.0.0"
@@ -657,6 +681,28 @@
                 "node": ">=10.10.0"
             }
         },
+        "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+            "version": "1.1.11",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "dev": true,
+            "dependencies": {
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
+            }
+        },
+        "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "dev": true,
+            "dependencies": {
+                "brace-expansion": "^1.1.7"
+            },
+            "engines": {
+                "node": "*"
+            }
+        },
         "node_modules/@humanwhocodes/module-importer": {
             "version": "1.0.1",
             "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
@@ -671,9 +717,9 @@
             }
         },
         "node_modules/@humanwhocodes/object-schema": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
-            "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+            "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
             "dev": true
         },
         "node_modules/@jridgewell/gen-mapping": {
@@ -847,9 +893,9 @@
             }
         },
         "node_modules/@oclif/plugin-help/node_modules/@oclif/core": {
-            "version": "2.15.0",
-            "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.15.0.tgz",
-            "integrity": "sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==",
+            "version": "2.16.0",
+            "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.16.0.tgz",
+            "integrity": "sha512-dL6atBH0zCZl1A1IXCKJgLPrM/wR7K+Wi401E/IvqsK8m2iCHW+0TEOGrans/cuN3oTW+uxIyJFHJ8Im0k4qBw==",
             "dev": true,
             "dependencies": {
                 "@types/cli-progress": "^3.11.0",
@@ -915,9 +961,9 @@
             }
         },
         "node_modules/@oclif/plugin-not-found/node_modules/@oclif/core": {
-            "version": "2.15.0",
-            "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.15.0.tgz",
-            "integrity": "sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==",
+            "version": "2.16.0",
+            "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.16.0.tgz",
+            "integrity": "sha512-dL6atBH0zCZl1A1IXCKJgLPrM/wR7K+Wi401E/IvqsK8m2iCHW+0TEOGrans/cuN3oTW+uxIyJFHJ8Im0k4qBw==",
             "dev": true,
             "dependencies": {
                 "@types/cli-progress": "^3.11.0",
@@ -992,9 +1038,9 @@
             }
         },
         "node_modules/@oclif/plugin-update/node_modules/@oclif/core": {
-            "version": "2.15.0",
-            "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.15.0.tgz",
-            "integrity": "sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==",
+            "version": "2.16.0",
+            "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.16.0.tgz",
+            "integrity": "sha512-dL6atBH0zCZl1A1IXCKJgLPrM/wR7K+Wi401E/IvqsK8m2iCHW+0TEOGrans/cuN3oTW+uxIyJFHJ8Im0k4qBw==",
             "dev": true,
             "dependencies": {
                 "@types/cli-progress": "^3.11.0",
@@ -1078,9 +1124,9 @@
             }
         },
         "node_modules/@oclif/plugin-warn-if-update-available/node_modules/@oclif/core": {
-            "version": "2.15.0",
-            "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.15.0.tgz",
-            "integrity": "sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==",
+            "version": "2.16.0",
+            "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.16.0.tgz",
+            "integrity": "sha512-dL6atBH0zCZl1A1IXCKJgLPrM/wR7K+Wi401E/IvqsK8m2iCHW+0TEOGrans/cuN3oTW+uxIyJFHJ8Im0k4qBw==",
             "dev": true,
             "dependencies": {
                 "@types/cli-progress": "^3.11.0",
@@ -1219,9 +1265,9 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "18.19.26",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.26.tgz",
-            "integrity": "sha512-+wiMJsIwLOYCvUqSdKTrfkS8mpTp+MPINe6+Np4TAGFWWRWiBQ5kSq9nZGCSPkzx9mvT+uEukzpX4MOSCydcvw==",
+            "version": "18.19.31",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz",
+            "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==",
             "dev": true,
             "dependencies": {
                 "undici-types": "~5.26.4"
@@ -1257,22 +1303,22 @@
             "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw=="
         },
         "node_modules/@typescript-eslint/eslint-plugin": {
-            "version": "7.4.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.4.0.tgz",
-            "integrity": "sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==",
+            "version": "7.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz",
+            "integrity": "sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==",
             "dev": true,
             "dependencies": {
-                "@eslint-community/regexpp": "^4.5.1",
-                "@typescript-eslint/scope-manager": "7.4.0",
-                "@typescript-eslint/type-utils": "7.4.0",
-                "@typescript-eslint/utils": "7.4.0",
-                "@typescript-eslint/visitor-keys": "7.4.0",
+                "@eslint-community/regexpp": "^4.10.0",
+                "@typescript-eslint/scope-manager": "7.7.0",
+                "@typescript-eslint/type-utils": "7.7.0",
+                "@typescript-eslint/utils": "7.7.0",
+                "@typescript-eslint/visitor-keys": "7.7.0",
                 "debug": "^4.3.4",
                 "graphemer": "^1.4.0",
-                "ignore": "^5.2.4",
+                "ignore": "^5.3.1",
                 "natural-compare": "^1.4.0",
-                "semver": "^7.5.4",
-                "ts-api-utils": "^1.0.1"
+                "semver": "^7.6.0",
+                "ts-api-utils": "^1.3.0"
             },
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
@@ -1292,15 +1338,15 @@
             }
         },
         "node_modules/@typescript-eslint/parser": {
-            "version": "7.4.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.4.0.tgz",
-            "integrity": "sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==",
+            "version": "7.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz",
+            "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/scope-manager": "7.4.0",
-                "@typescript-eslint/types": "7.4.0",
-                "@typescript-eslint/typescript-estree": "7.4.0",
-                "@typescript-eslint/visitor-keys": "7.4.0",
+                "@typescript-eslint/scope-manager": "7.7.0",
+                "@typescript-eslint/types": "7.7.0",
+                "@typescript-eslint/typescript-estree": "7.7.0",
+                "@typescript-eslint/visitor-keys": "7.7.0",
                 "debug": "^4.3.4"
             },
             "engines": {
@@ -1320,13 +1366,13 @@
             }
         },
         "node_modules/@typescript-eslint/scope-manager": {
-            "version": "7.4.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz",
-            "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==",
+            "version": "7.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz",
+            "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/types": "7.4.0",
-                "@typescript-eslint/visitor-keys": "7.4.0"
+                "@typescript-eslint/types": "7.7.0",
+                "@typescript-eslint/visitor-keys": "7.7.0"
             },
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
@@ -1337,15 +1383,15 @@
             }
         },
         "node_modules/@typescript-eslint/type-utils": {
-            "version": "7.4.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.4.0.tgz",
-            "integrity": "sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==",
+            "version": "7.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz",
+            "integrity": "sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/typescript-estree": "7.4.0",
-                "@typescript-eslint/utils": "7.4.0",
+                "@typescript-eslint/typescript-estree": "7.7.0",
+                "@typescript-eslint/utils": "7.7.0",
                 "debug": "^4.3.4",
-                "ts-api-utils": "^1.0.1"
+                "ts-api-utils": "^1.3.0"
             },
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
@@ -1364,9 +1410,9 @@
             }
         },
         "node_modules/@typescript-eslint/types": {
-            "version": "7.4.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz",
-            "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==",
+            "version": "7.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz",
+            "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==",
             "dev": true,
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
@@ -1377,19 +1423,19 @@
             }
         },
         "node_modules/@typescript-eslint/typescript-estree": {
-            "version": "7.4.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz",
-            "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==",
+            "version": "7.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz",
+            "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/types": "7.4.0",
-                "@typescript-eslint/visitor-keys": "7.4.0",
+                "@typescript-eslint/types": "7.7.0",
+                "@typescript-eslint/visitor-keys": "7.7.0",
                 "debug": "^4.3.4",
                 "globby": "^11.1.0",
                 "is-glob": "^4.0.3",
-                "minimatch": "9.0.3",
-                "semver": "^7.5.4",
-                "ts-api-utils": "^1.0.1"
+                "minimatch": "^9.0.4",
+                "semver": "^7.6.0",
+                "ts-api-utils": "^1.3.0"
             },
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
@@ -1404,43 +1450,19 @@
                 }
             }
         },
-        "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-            "dev": true,
-            "dependencies": {
-                "balanced-match": "^1.0.0"
-            }
-        },
-        "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
-            "version": "9.0.3",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
-            "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
-            "dev": true,
-            "dependencies": {
-                "brace-expansion": "^2.0.1"
-            },
-            "engines": {
-                "node": ">=16 || 14 >=14.17"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
         "node_modules/@typescript-eslint/utils": {
-            "version": "7.4.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz",
-            "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==",
+            "version": "7.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz",
+            "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==",
             "dev": true,
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.4.0",
-                "@types/json-schema": "^7.0.12",
-                "@types/semver": "^7.5.0",
-                "@typescript-eslint/scope-manager": "7.4.0",
-                "@typescript-eslint/types": "7.4.0",
-                "@typescript-eslint/typescript-estree": "7.4.0",
-                "semver": "^7.5.4"
+                "@types/json-schema": "^7.0.15",
+                "@types/semver": "^7.5.8",
+                "@typescript-eslint/scope-manager": "7.7.0",
+                "@typescript-eslint/types": "7.7.0",
+                "@typescript-eslint/typescript-estree": "7.7.0",
+                "semver": "^7.6.0"
             },
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
@@ -1454,13 +1476,13 @@
             }
         },
         "node_modules/@typescript-eslint/visitor-keys": {
-            "version": "7.4.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz",
-            "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==",
+            "version": "7.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz",
+            "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/types": "7.4.0",
-                "eslint-visitor-keys": "^3.4.1"
+                "@typescript-eslint/types": "7.7.0",
+                "eslint-visitor-keys": "^3.4.3"
             },
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
@@ -1730,13 +1752,12 @@
             }
         },
         "node_modules/brace-expansion": {
-            "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
             "dev": true,
             "dependencies": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
+                "balanced-match": "^1.0.0"
             }
         },
         "node_modules/braces": {
@@ -2250,9 +2271,9 @@
             }
         },
         "node_modules/ejs": {
-            "version": "3.1.9",
-            "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz",
-            "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==",
+            "version": "3.1.10",
+            "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+            "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
             "dev": true,
             "dependencies": {
                 "jake": "^10.8.5"
@@ -2459,6 +2480,16 @@
             "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
             "dev": true
         },
+        "node_modules/eslint/node_modules/brace-expansion": {
+            "version": "1.1.11",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "dev": true,
+            "dependencies": {
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
+            }
+        },
         "node_modules/eslint/node_modules/js-yaml": {
             "version": "4.1.0",
             "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -2471,6 +2502,18 @@
                 "js-yaml": "bin/js-yaml.js"
             }
         },
+        "node_modules/eslint/node_modules/minimatch": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "dev": true,
+            "dependencies": {
+                "brace-expansion": "^1.1.7"
+            },
+            "engines": {
+                "node": "*"
+            }
+        },
         "node_modules/espree": {
             "version": "9.6.1",
             "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
@@ -2685,15 +2728,6 @@
                 "minimatch": "^5.0.1"
             }
         },
-        "node_modules/filelist/node_modules/brace-expansion": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-            "dev": true,
-            "dependencies": {
-                "balanced-match": "^1.0.0"
-            }
-        },
         "node_modules/filelist/node_modules/minimatch": {
             "version": "5.1.6",
             "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
@@ -3008,6 +3042,28 @@
                 "node": ">=10.13.0"
             }
         },
+        "node_modules/glob/node_modules/brace-expansion": {
+            "version": "1.1.11",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "dev": true,
+            "dependencies": {
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
+            }
+        },
+        "node_modules/glob/node_modules/minimatch": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "dev": true,
+            "dependencies": {
+                "brace-expansion": "^1.1.7"
+            },
+            "engines": {
+                "node": "*"
+            }
+        },
         "node_modules/globals": {
             "version": "13.24.0",
             "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
@@ -3477,6 +3533,28 @@
                 "node": ">=10"
             }
         },
+        "node_modules/jake/node_modules/brace-expansion": {
+            "version": "1.1.11",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "dev": true,
+            "dependencies": {
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
+            }
+        },
+        "node_modules/jake/node_modules/minimatch": {
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "dev": true,
+            "dependencies": {
+                "brace-expansion": "^1.1.7"
+            },
+            "engines": {
+                "node": "*"
+            }
+        },
         "node_modules/js-yaml": {
             "version": "3.14.1",
             "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
@@ -3837,15 +3915,18 @@
             }
         },
         "node_modules/minimatch": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "version": "9.0.4",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
+            "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
             "dev": true,
             "dependencies": {
-                "brace-expansion": "^1.1.7"
+                "brace-expansion": "^2.0.1"
             },
             "engines": {
-                "node": "*"
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
         "node_modules/minimist": {
@@ -3919,9 +4000,9 @@
             }
         },
         "node_modules/node-abi": {
-            "version": "3.56.0",
-            "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz",
-            "integrity": "sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==",
+            "version": "3.59.0",
+            "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.59.0.tgz",
+            "integrity": "sha512-HyyfzvTLCE8b1SX2nWimlra8cibEsypcSu/Az4SXMhWhtuctkwAX7qsEYNjUOIoYtPV884oN3wtYTN+iZKBtvw==",
             "dev": true,
             "dependencies": {
                 "semver": "^7.3.5"
@@ -4381,9 +4462,9 @@
             }
         },
         "node_modules/qs": {
-            "version": "6.12.0",
-            "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz",
-            "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==",
+            "version": "6.12.1",
+            "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz",
+            "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==",
             "dependencies": {
                 "side-channel": "^1.0.6"
             },
@@ -5103,9 +5184,9 @@
             "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
         },
         "node_modules/tsx": {
-            "version": "4.7.1",
-            "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.1.tgz",
-            "integrity": "sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==",
+            "version": "4.7.2",
+            "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.2.tgz",
+            "integrity": "sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==",
             "dev": true,
             "dependencies": {
                 "esbuild": "~0.19.10",
@@ -5157,9 +5238,9 @@
             }
         },
         "node_modules/typescript": {
-            "version": "5.4.3",
-            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz",
-            "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==",
+            "version": "5.4.5",
+            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
+            "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
             "dev": true,
             "bin": {
                 "tsc": "bin/tsc",
@@ -5170,14 +5251,14 @@
             }
         },
         "node_modules/typescript-eslint": {
-            "version": "7.4.0",
-            "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.4.0.tgz",
-            "integrity": "sha512-8GYQsb/joknlAZEAs/kqonfrsAc98C5DoellmwHREPqKwSTKSY2YB93IwmvNuX6+WE5QkKc31X9wHo/UcpYXpw==",
+            "version": "7.7.0",
+            "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.7.0.tgz",
+            "integrity": "sha512-wZZ+7mTQJCn4mGAvzdERtL4vwKGM/mF9cMSMeKUllz3Hgbd1Mdd5L60Q+nJmCio9RB4OyMMr0EX4Ry2Q7jiAyw==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/eslint-plugin": "7.4.0",
-                "@typescript-eslint/parser": "7.4.0",
-                "@typescript-eslint/utils": "7.4.0"
+                "@typescript-eslint/eslint-plugin": "7.7.0",
+                "@typescript-eslint/parser": "7.7.0",
+                "@typescript-eslint/utils": "7.7.0"
             },
             "engines": {
                 "node": "^18.18.0 || >=20.0.0"
@@ -5420,17 +5501,17 @@
             }
         },
         "node_modules/zod": {
-            "version": "3.22.4",
-            "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",
-            "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==",
+            "version": "3.22.5",
+            "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.5.tgz",
+            "integrity": "sha512-HqnGsCdVZ2xc0qWPLdO25WnseXThh0kEYKIdV5F/hTHO75hNZFp8thxSeHhiPrHZKrFTo1SOgkAj9po5bexZlw==",
             "funding": {
                 "url": "https://github.com/sponsors/colinhacks"
             }
         },
         "node_modules/zod-validation-error": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.0.3.tgz",
-            "integrity": "sha512-cETTrcMq3Ze58vhdR0zD37uJm/694I6mAxcf/ei5bl89cC++fBNxrC2z8lkFze/8hVMPwrbtrwXHR2LB50fpHw==",
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.1.0.tgz",
+            "integrity": "sha512-zujS6HqJjMZCsvjfbnRs7WI3PXN39ovTcY1n8a+KTm4kOH0ZXYsNiJkH1odZf4xZKMkBDL7M2rmQ913FCS1p9w==",
             "engines": {
                 "node": ">=18.0.0"
             },
diff --git a/NodeApp/package.json b/NodeApp/package.json
index b2511238b3d92c539572822f174cecbc2c293fcd..4565b40b4c018b06c1331f742354a83a5652a9ea 100644
--- a/NodeApp/package.json
+++ b/NodeApp/package.json
@@ -33,14 +33,14 @@
         "test"        : "echo \"Error: no test specified\" && exit 1"
     },
     "dependencies"   : {
-        "@gitbeaker/rest"           : "^40.0.1",
-        "@gitbeaker/core"           : "^40.0.1",
-        "@gitbeaker/requester-utils": "^40.0.1",
+        "@gitbeaker/rest"           : "^40.0.2",
+        "@gitbeaker/core"           : "^40.0.2",
+        "@gitbeaker/requester-utils": "^40.0.2",
         "appdata-path"              : "^1.0.0",
-        "axios"                     : "^1.6.5",
+        "axios"                     : "^1.6.8",
         "boxen"                     : "^5.1.2",
         "chalk"                     : "^4.1.2",
-        "commander"                 : "^11.1.0",
+        "commander"                 : "^12.0.0",
         "dotenv"                    : "^16.3.1",
         "dotenv-expand"             : "^10.0.0",
         "form-data"                 : "^4.0.0",
@@ -51,13 +51,13 @@
         "jsonwebtoken"              : "^8.5.1",
         "open"                      : "^8.4.2",
         "ora"                       : "^5.4.1",
-        "semver"                    : "^7.5.4",
-        "tar-stream"                : "^3.1.6",
-        "winston"                   : "^3.11.0",
+        "semver"                    : "^7.6.0",
+        "tar-stream"                : "^3.1.7",
+        "winston"                   : "^3.13.0",
         "winston-transport"         : "^4.7.0",
-        "yaml"                      : "^2.3.4",
+        "yaml"                      : "^2.4.1",
         "zod"                       : "^3.22.4",
-        "zod-validation-error"      : "^3.0.0"
+        "zod-validation-error"      : "^3.0.3"
     },
     "devDependencies": {
         "@types/fs-extra"                 : "^11.0.4",
@@ -66,12 +66,15 @@
         "@types/node"                     : "^18.19.2",
         "@types/semver"                   : "^7.5.6",
         "@types/tar-stream"               : "^3.1.3",
-        "@typescript-eslint/eslint-plugin": "^6.18.1",
-        "@typescript-eslint/parser"       : "^6.18.1",
+        "@typescript-eslint/eslint-plugin": "^7.7.0",
+        "@typescript-eslint/parser"       : "^7.7.0",
         "dotenv-vault"                    : "^1.25.0",
+        "eslint"                          : "^8.57.0",
         "genversion"                      : "^3.2.0",
         "pkg"                             : "^5.8.1",
+        "tiny-typed-emitter"              : "^2.1.0",
         "tsx"                             : "^4.7.1",
-        "typescript"                      : "^5.4.2"
+        "typescript"                      : "^5.4.5",
+        "typescript-eslint"               : "^7.7.0"
     }
 }
diff --git a/NodeApp/src/commander/CommanderApp.ts b/NodeApp/src/commander/CommanderApp.ts
index c2d236f8e6520209255fe264e359a9b248bc76f7..7cb5952408f98e02b73517ca53746c41dc13c3ab 100644
--- a/NodeApp/src/commander/CommanderApp.ts
+++ b/NodeApp/src/commander/CommanderApp.ts
@@ -96,7 +96,7 @@ ${ TextStyle.CODE(' dojo upgrade ') }`, {
         if ( SharedConfig.production ) {
             const latestDojoCliVersion = stateConfigFile.getParam('latestDojoCliVersion') as string | null || '0.0.0';
             const latestDojoCliVersionNotification = stateConfigFile.getParam('latestDojoCliVersionNotification') as number | null || 0;
-            if ( semver.lt(version, latestDojoCliVersion) && (new Date()).getTime() - latestDojoCliVersionNotification >= Config.versionUpdateInformationPeriodHours * 60 * 60 * 1000 ) {
+            if ( semver.lt(version as string, latestDojoCliVersion) && (new Date()).getTime() - latestDojoCliVersionNotification >= Config.versionUpdateInformationPeriodHours * 60 * 60 * 1000 ) {
                 console.log(boxen(`The ${ latestDojoCliVersion } version of the DojoCLI is available.
 You can upgrade the DojoCLI by executing this command: 
 ${ TextStyle.CODE(' dojo upgrade ') }`, {
diff --git a/NodeApp/src/commander/exercise/subcommands/ExerciseCorrectionCommand.ts b/NodeApp/src/commander/exercise/subcommands/ExerciseCorrectionCommand.ts
index 146829dcc1bf320eb4c4daa5c6652b53eea3e6b9..6dfddd1a4eed2f39a8ae2def689536d4b9275bdf 100644
--- a/NodeApp/src/commander/exercise/subcommands/ExerciseCorrectionCommand.ts
+++ b/NodeApp/src/commander/exercise/subcommands/ExerciseCorrectionCommand.ts
@@ -68,7 +68,7 @@ class ExerciseCorrectionCommand extends CommanderCommand {
 
         console.log(TextStyle.URL(correctionUrl));
 
-        open(correctionUrl).then();
+        await open(correctionUrl);
     }
 }
 
diff --git a/NodeApp/src/config/LocalConfigFile.ts b/NodeApp/src/config/LocalConfigFile.ts
index a292b4ec9cba0ea8755da098fabcf9aadd607a3d..29f62a6343defe952125d6e52b546fbd7f5e7057 100644
--- a/NodeApp/src/config/LocalConfigFile.ts
+++ b/NodeApp/src/config/LocalConfigFile.ts
@@ -8,7 +8,7 @@ class LocalConfigFile {
 
     constructor(filename: string) {
         this.filename = filename;
-        
+
         this.loadConfig();
     }
 
@@ -32,7 +32,7 @@ class LocalConfigFile {
         }
     }
 
-    getParam(key: string): unknown | null {
+    getParam(key: string): unknown {
         const value = key in this._config ? this._config[key] : null;
         if ( value === null ) {
             return null;
diff --git a/NodeApp/src/helpers/AutoCompletionHelper.ts b/NodeApp/src/helpers/AutoCompletionHelper.ts
index 28dea1d9ebe8c2dfc104ba8952a5d97fd43d8dca..122be3bc783ed231386135b1a747cc45a67dc3d8 100644
--- a/NodeApp/src/helpers/AutoCompletionHelper.ts
+++ b/NodeApp/src/helpers/AutoCompletionHelper.ts
@@ -27,7 +27,7 @@ async function askConfirmation(msg: string): Promise<boolean> {
                                       message: msg,
                                       type   : 'confirm',
                                       default: false
-                                  })).confirm;
+                                  })).confirm as boolean;
 }
 
 // Returns false, when the renaming is interrupted
diff --git a/NodeApp/src/helpers/Dojo/ExerciseRunHelper.ts b/NodeApp/src/helpers/Dojo/ExerciseRunHelper.ts
index a3067c317bb3aebe38a28a8ca340430d9742e575..1da04530c3f6ad3a296570c85080d93683f707b5 100644
--- a/NodeApp/src/helpers/Dojo/ExerciseRunHelper.ts
+++ b/NodeApp/src/helpers/Dojo/ExerciseRunHelper.ts
@@ -256,7 +256,7 @@ class ExerciseRunHelper {
                 });
 
                 this.exerciseResultsValidation.events.on('finished', (success: boolean, exitCode: number) => {
-                    success || exitCode === ExerciseCheckerError.EXERCISE_RESULTS_FOLDER_TOO_BIG ? resolve() : reject();
+                    success || exitCode === ExerciseCheckerError.EXERCISE_RESULTS_FOLDER_TOO_BIG.valueOf() ? resolve() : reject();
                 });
 
                 this.exerciseResultsValidation.run();
@@ -271,7 +271,7 @@ class ExerciseRunHelper {
      * Step 4: Display results + Volume location
      * @private
      */
-    private async displayResults() {
+    private displayResults() {
         const info = chalk.magenta.bold.italic;
         ClientsSharedExerciseHelper.displayExecutionResults(this.exerciseResultsValidation.exerciseResults, this.exerciseDockerCompose.exitCode, {
             INFO   : info,
@@ -285,7 +285,7 @@ class ExerciseRunHelper {
             await this.checkRequirements();
             await this.runDockerCompose();
             await this.getResults();
-            await this.displayResults();
+            this.displayResults();
         } catch ( error ) {
             return;
         }
diff --git a/NodeApp/src/managers/DojoBackendManager.ts b/NodeApp/src/managers/DojoBackendManager.ts
index ff4e83e231ccc7d7a63f074be9b949dec888b5db..c16b7388e4fede536e61f97fe0e2ba57e410e02b 100644
--- a/NodeApp/src/managers/DojoBackendManager.ts
+++ b/NodeApp/src/managers/DojoBackendManager.ts
@@ -25,7 +25,7 @@ class DojoBackendManager {
                         spinner.fail(`No pipeline found for this assignment.`);
                         break;
                     case DojoStatusCode.ASSIGNMENT_PUBLISH_PIPELINE_FAILED:
-                        spinner.fail(error.response?.data?.message ?? `Last pipeline status is not "${ GitlabPipelineStatus.SUCCESS }".`);
+                        spinner.fail((error.response?.data?.message as string | undefined) ?? `Last pipeline status is not "${ GitlabPipelineStatus.SUCCESS }".`);
                         break;
                     case DojoStatusCode.EXERCISE_CORRECTION_ALREADY_EXIST:
                         spinner.fail(`This exercise is already labelled as a correction. If you want to update it, please use the update command.`);
@@ -199,7 +199,7 @@ class DojoBackendManager {
         }
 
         try {
-            const axiosFunction = isUpdate ? axios.patch : axios.post;
+            const axiosFunction = isUpdate ? axios.patch.bind(axios) : axios.post.bind(axios);
             const route = isUpdate ? ApiRoute.ASSIGNMENT_CORRECTION_UPDATE : ApiRoute.ASSIGNMENT_CORRECTION_LINK;
 
             await axiosFunction(DojoBackendHelper.getApiUrl(route, {
diff --git a/NodeApp/src/managers/HttpManager.ts b/NodeApp/src/managers/HttpManager.ts
index e854c4b79d50779d7376bfe9e5fc588374335306..760f19c1f1f0b4d12089bd6f9badd84e68eb424d 100644
--- a/NodeApp/src/managers/HttpManager.ts
+++ b/NodeApp/src/managers/HttpManager.ts
@@ -26,9 +26,11 @@ class HttpManager {
             }
 
             if ( config.url && (config.url.indexOf(ClientsSharedConfig.apiURL) !== -1) ) {
+
+
                 config.headers['Accept-Encoding'] = 'gzip';
 
-                if ( config.data && Object.keys(config.data).length > 0 ) {
+                if ( config.data && Object.keys(config.data as { [key: string]: unknown }).length > 0 ) {
                     config.headers['Content-Type'] = 'multipart/form-data';
                 }
 
@@ -62,10 +64,10 @@ class HttpManager {
             const data: DojoBackendResponse<void> = error.response.data as DojoBackendResponse<void>;
 
             switch ( data.code ) {
-                case DojoStatusCode.CLIENT_NOT_SUPPORTED:
+                case DojoStatusCode.CLIENT_NOT_SUPPORTED.valueOf():
                     this.requestError('Client not recognized by the server. Please contact the administrator.');
                     break;
-                case DojoStatusCode.CLIENT_VERSION_NOT_SUPPORTED:
+                case DojoStatusCode.CLIENT_VERSION_NOT_SUPPORTED.valueOf():
                     this.requestError(`CLI version not anymore supported by the server. Please update the CLI by executing this command:\n${ TextStyle.CODE(' dojo upgrade ') }`);
                     break;
                 default:
@@ -77,13 +79,13 @@ class HttpManager {
     private apiAuthorizationError(error: AxiosError, isFromApi: boolean) {
         if ( this.handleAuthorizationCommandErrors && isFromApi && error.response ) {
             const errorCustomCode = (error.response.data as DojoBackendResponse<unknown> | undefined)?.code ?? error.response.status;
-            
+
             if ( errorCustomCode === error.response.status ) {
                 switch ( error.response.status ) {
-                    case StatusCodes.UNAUTHORIZED:
+                    case StatusCodes.UNAUTHORIZED.valueOf():
                         this.requestError('Session expired or does not exist. Please login again.');
                         break;
-                    case StatusCodes.FORBIDDEN:
+                    case StatusCodes.FORBIDDEN.valueOf():
                         this.requestError('Forbidden access.');
                         break;
                     default:
@@ -114,8 +116,8 @@ class HttpManager {
 
             return response;
         }, async error => {
-            if ( error.response ) {
-                const isFromApi = error.response.config.url && error.response.config.url.indexOf(ClientsSharedConfig.apiURL) !== -1;
+            if ( error instanceof AxiosError && error.response ) {
+                const isFromApi = error.response.config.url !== undefined && error.response.config.url.indexOf(ClientsSharedConfig.apiURL) !== -1;
 
                 this.apiMethodNotAllowed(error, isFromApi);
                 this.apiAuthorizationError(error, isFromApi);
diff --git a/NodeApp/src/managers/SessionManager.ts b/NodeApp/src/managers/SessionManager.ts
index e3f6b2f52f6bd3678a3ed1c5182020f9208282a8..2b4a3da164b0419c08adac66ae5fe61a8b587f44 100644
--- a/NodeApp/src/managers/SessionManager.ts
+++ b/NodeApp/src/managers/SessionManager.ts
@@ -134,7 +134,7 @@ class SessionManager {
                                           message: `${ chalk.green('?') } Please paste the Gitlab code here`,
                                           mask   : '*',
                                           prefix : '   '
-                                      })).code;
+                                      })).code as string;
     }
 
     private getGitlabCodeFromGraphicEnvironment(): Promise<string> {
@@ -156,7 +156,7 @@ class SessionManager {
                                          text  : `Waiting for user to authorize the application in his web browser. If the browser does not open automatically, please go to : ${ Config.login.gitlab.url.code }`,
                                          indent: 4
                                      }).start();
-                open(Config.login.gitlab.url.code).then();
+                void open(Config.login.gitlab.url.code).then();
             });
             loginServer.events.on('error', (error: string) => {
                 currentSpinner.fail(`Login server error: ${ error }`);